Android開發:Android 按2次back鍵程序才退出

2S內再次點擊則退出

在我們使用的app中,會出現這種情況,按下back鍵app 沒退出,彈出吐司“再按一次將退出”,然後我們按一次,app退出了,代碼很簡單。一是根據Boolean 類型的isExit的值判斷是否退出
二是根據連續2次按下的時間間隔是否符合我們的條件,來退出。

方法一:boolean限制

protected boolean flag = false;
@Override
public void onBackPressed() {
    if (flag) {
        super.onBackPressed();
        System.exit(0);
    } else {
        Toast.makeText(MainActivity.this, "再點一次則退出App", Toast.LENGTH_SHORT).show();
        flag = true;
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                flag = false;
            }
        }, 2000);
    }
}
private boolean  isExit=false;//確保第一次按back不退出,因爲不走if
@Override
public void onBackPressed() {
    if (isExit) {
        finish();//關閉activity
        System.exit(0);//程序退出
    } else {
        Toast.makeText(getApplicationContext(), "再按一次將退出", Toast.LENGTH_LONG).show();
        isExit=true;//值改爲true,確保第二次按走if退出
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                isExit=false;//2s後將值重新改成false,確保2次按下的事件在2分鐘內.也可以用handler將值改爲false
            }
        }, 2000);
    }
}

方法二:判斷時間間隔<2000毫秒,退出app

long exitTime=0;
@Override
public void onBackPressed() {
    if (System.currentTimeMillis()-exitTime>2000) {
        Toast.makeText(getApplicationContext(), "再按一次將退出", Toast.LENGTH_LONG).show();
        exitTime=System.currentTimeMillis();
    } else {
        finish();
        System.exit(0);
    }
}


    @Override
    public void onBackPressed() {
    if (System.currentTimeMillis() - time < 2000) {
        super.onBackPressed();
    } else {
        showToast("再點擊一次退出哦!");
        time = System.currentTimeMillis();
    }
    }

按鈕禁止連續點擊

long oldTime = 0;
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - oldTime > 2000) {
            ToastUtil.showShortToast(MainActivity.this, "再按一次則退出app");
        } else {
            ToastUtil.showShortToast(MainActivity.this, "退出App");
        }
        oldTime = clickTime;
    }
});

給所有的按鈕統一添加

public class CustomOnClickListener implements View.OnClickListener {

    public CustomOnClickListener(TimeLimitClickListener listener) {
        this.listener = listener;
    }

    long oldTime = 0;

    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - oldTime < 2000) {
            Toast.makeText(v.getContext(), "2s禁止連續點擊", Toast.LENGTH_SHORT).show();
        } else {
            setListener(listener);
        }
        oldTime = clickTime;
    }

    interface TimeLimitClickListener {
        void xianZhi2s();
    }

    private TimeLimitClickListener listener;

    private void setListener(TimeLimitClickListener listener) {
        listener.xianZhi2s();
    }
}

使用:

btn1.setOnClickListener(new CustomOnClickListener(new CustomOnClickListener.TimeLimitClickListener() {
    @Override
    public void xianZhi2s() {

    }
}));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章