避免在按下“后退”按钮时关闭AlertDialog

时间:2018-07-30 00:28:09

标签: android events alertdialogpro

我有一个AlertDialog,如果按下设备的后退按钮,则在某种情况下(该按钮未启用)不应关闭。

通过以下代码,我已经部分实现了所需的行为。

 dialog1.setOnCancelListener(new DialogInterface.OnCancelListener() 
 {
     @Override
     public void onCancel(DialogInterface dialog) 
     {
         Button button3 = ((AlertDialog) 
         dialog1).getButton(AlertDialog.BUTTON_NEUTRAL);
         if (!button3.isEnabled())
         {
             dialog1.show();
         }
         else
         {
             dialog1.dismiss();
         }
    }
});

但是此代码存在2个问题:

1)在很短的时间内,dialog1停止显示以再次显示,这看起来有点不好。

2)更重要的是,在禁用该按钮时将显示一个需要的按钮,该按钮将停止显示,该按钮最初不会与对话框一起显示,在某些情况下还触发了所显示的按钮被禁用,因此它会显示出来。由于某种原因,对话框似乎没有刷新到最后状态,只保留了原来具有的元素。

是否仍然存在,如果在上述情况下显示对话框时,如果按下后退按钮,则绝对不会发生任何事情,或者至少保持与关闭时完全相同的元素,然后再次显示?

2 个答案:

答案 0 :(得分:2)

使用setCancelable();

  

设置对话框是否可取消。默认值为true。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);

这不会让您在对话框外单击以将其关闭,或者只是简单地返回关闭它

dialog1.setCancelable(false);

答案 1 :(得分:1)

覆盖onBackPressed()并添加禁用按钮的检查:

@Override
public void onBackPressed() {
   if (button3.isEnabled()) {
       //do something
   } else {
       super.onBackPressed();
   }
}