4

我知道这个问题在这里被问过很多次,但我没有找到我的问题的正确答案。

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

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

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

4

5 回答 5

13

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

   @Override
   public void onBackPressed() {

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

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

    }

}
于 2013-06-26T04:18:10.770 回答
5

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

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

注意..

  • 它也适用于古代版本

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

于 2013-06-26T04:30:02.673 回答
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();       

    }

}
于 2013-06-26T04:26:56.260 回答
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
    }
于 2018-08-11T10:49:45.963 回答
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变量“在某种程度上”是线程安全的。

于 2019-01-28T17:07:45.040 回答