【问题标题】:Avoid AlertDialog to be dismissed when back button is pressed避免按下后退按钮时关闭 AlertDialog
【发布时间】:2018-07-30 14:19:00
【问题描述】:

如果按下设备的后退按钮,我有一个不应该在特定条件下关闭的 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) 更重要的是,当该按钮被禁用时显示的一个需要的按钮停止显示,该按钮最初不会与对话框一起显示,在某些情况下也会触发显示的按钮被禁用它会显示。出于某种原因,对话框似乎没有刷新到上一个状态,并且只保留了最初的元素。

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

【问题讨论】:

    标签: android events alertdialogpro


    【解决方案1】:

    使用setCancelable();

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

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

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

    dialog1.setCancelable(false);
    

    【讨论】:

    • @Vicjordan,这是一个有效的答案,我只是想避免关闭对话框,我不在乎是通过定义这样的对话框还是通过禁用后退按钮来完成的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-22
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多