禁用后退按钮暂时

时间:2013-06-26 04:16:24

标签: android

我知道这个问题已在这里多次被问到,但我没有找到我的问题的属性答案。

此代码可以禁用后退按钮:

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

但无论如何我可以暂时禁用后退按钮,而不是整个活动?

5 个答案:

答案 0 :(得分:13)

它是禁用后退按钮的完美解决方案

   @Override
   public void onBackPressed() {

    if(condition to check){
       // this block disable back button

    }else{
       // this block enable back button
        super.onBackPressed();       

    }

}

答案 1 :(得分:4)

Dixit的好回答。只是另一种选择

public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean result = false;
    if (keyCode == KEYCODE_BACK) {
        if (condition) {
            result =  true;
        }
    }
    return result;
}

N.B ..

  • 它也适用于古代版本

  • 从onKeyDown返回true会消耗默认行为

答案 2 :(得分:3)

您必须设置boolean flag,您必须要求禁用后退按钮设置flag value true;

onBackPressed()中,您必须根据 @Dixit 说明

@Override
   public void onBackPressed() {

    if(condition to check){
       // this block disable back button

    }else{
       // this block enable back button
        super.onBackPressed();       

    }

}

答案 3 :(得分:1)

如果要在一段时间内禁用后退按钮,请使用此功能,

//for 5 sec = 5000
countDownTimer = new CountDownTimer(5000,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtWait.setTextColor(getResources().getColor(R.color.errorcolor));
            txtWait.setText("Wait( " + millisUntilFinished / 1000+" sec)");
            onBackPressed();
        }

        @Override
        public void onFinish() {
            YourActivityName.super.onBackPressed();

        }
    }.start();

在覆盖方法中:

     @Override
    public void onBackPressed() {

        //super.onBackPressed();  commented this to disable the back press
    }

答案 4 :(得分:0)

完整的工作代码:

authenticatedAttributes
  

注意:您也可以在其他情况下使用YourActivity extends AppCompatActivity{ boolean isBackButtonDisabled = false; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState) setContentView(R.layout.somelayout); disableBackButton(4000); //<--Back button is disabled } @Override public void onBackPressed(){ if(!sBackButtonDisabled){ super.onBackPressed(); } } private void disableBackButton(final int timeInMilis){ if(!isBackButtonDisabled) { isBackButtonDisabled = true; //<-- Keep it outside Thread code Thread t = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(timeInMilis); } catch (InterruptedException e) { } finally { isBackButtonDisabled = false; } } }); t.start(); } } } 。例如,单击按钮。如果   您单击按钮多次,线程将只运行一次。因为在这段代码中   disableBackButton(time)变量“以某种方式”是线程安全的。