暂时禁用返回按钮

4

我知道这个问题已经在这里被问了很多次,但是我没有找到适合我的问题的答案。

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

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

但是有没有办法在临时时间内禁用返回按钮,而不是整个Activity?

你有没有检查过这个链接? - Krrishnaaaa
请查看此问题:https://dev59.com/5XLYa4cB1Zd3GeqPcdqk - Chathura Priyankara
@Krrishnaaaa,:) 多么奇怪!!我在问我的问题之前就读过那个问题,但我没有注意到那个答案..谢谢。 - Alamri
4个回答

5
很棒的答案,Dixit说得很好。这里还有另一个选择。
public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean result = false;
    if (keyCode == KEYCODE_BACK) {
        if (condition) {
            result =  true;
        }
    }
    return result;
}

注意:

  • 它也适用于古老的版本

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


被选为正确答案,支持所有版本和时间。谢谢。 - Alamri

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();       

    }

}

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
    }

0

完整可运行的代码:

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)。例如,按钮单击。如果您多次单击按钮,则线程仅运行一次。因为在此代码中,isBackButtonDisable变量是“某种方式”线程安全的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接