如何防止警报对话框被后退按钮关闭

Posted

技术标签:

【中文标题】如何防止警报对话框被后退按钮关闭【英文标题】:How to Prevent an Alert Dialog Getting Closed by Back Button 【发布时间】:2011-10-30 03:02:02 【问题描述】:

我有一个这样的警告对话框:

    AlertDialog.Builder oyunaBaslaDialog = new AlertDialog.Builder(this);
    oyunaBaslaDialog.setMessage("A Takımı");
    oyunaBaslaDialog.setNeutralButton("Başla!",
            new DialogInterface.OnClickListener() 
                public void onClick(DialogInterface arg0, int arg1) 
                    oyunOyna();
                
            );
    oyunaBaslaDialog.show();

此对话框显示在 onCreate 方法中。我希望它只是被它上面的按钮关闭。但是硬件返回按钮也可以在不执行对话框操作的情况下关闭此对话框。

我不希望后退按钮关闭此对话框,我该怎么办?

【问题讨论】:

【参考方案1】:

使用Dialog.setCancelable():

设置此对话框是否可以使用 BACK 键取消。

在您的代码中,这将是:

oyunaBaslaDialog.setCancelable(false);

【讨论】:

但是如果你只是想根据某些条件决定返回键是否关闭对话框呢? 如果您的对话框在 DialogFragment 内,您需要为 DialogFragment 调用 setCancelable(false) 否则 Back 将关闭该片段。文档链接:developer.android.com/reference/android/app/…【参考方案2】:

实现 setOnKeyListener 并捕获 KeyEvent.KEYCODE_BACK。 如果在此方法中返回 true,则对话框不会关闭。

【讨论】:

这样,当用户按下 Dialog 上的返回按钮时,您实际上可以做任何您想做的事情。 这对我来说是唯一有用的解决方案,因为我想为后退按钮添加一个动作。【参考方案3】:

有一个方法叫做, bulder.setCancelable()。默认情况下,此可取消设置为 'true'。覆盖它,

bulder.setCancelable(false)

【讨论】:

以上是关于如何防止警报对话框被后退按钮关闭的主要内容,如果未能解决你的问题,请参考以下文章

检测后退按钮但不关闭对话框片段

在(后退按钮、前进按钮、关闭选项卡/浏览器)上运行最后一个 Ajax 请求 [重复]

使用后退按钮关闭棉花糖上的权限请求对话框

在颤动中打开对话框时检测返回按钮按下

单击对话框内的asp按钮时,如何防止关闭jQuery模式对话框?

如何从对话中最小化或关闭应用程序?