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

Avoid AlertDialog to be dismissed when back button is pressed

我有一个 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();
         }
    }
});

但是这段代码存在两个问题:

1) dialog1 有一小段时间停止显示再次显示,这看起来有点糟糕。

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

有没有这样的,如果在上述条件下显示对话框时按下后退按钮,绝对不会发生任何事情,或者至少保持与关闭时完全相同的元素,稍后再次显示?

使用setCancelable();

Sets whether the dialog is cancelable or not. Default is true.

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

这不会让您在对话框外单击以关闭它,或者直接返回关闭它

dialog1.setCancelable(false);

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

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