我有一个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)更重要的是,在禁用该按钮时将显示一个需要的按钮,该按钮将停止显示,该按钮最初不会与对话框一起显示,在某些情况下还触发了所显示的按钮被禁用,因此它会显示出来。由于某种原因,对话框似乎没有刷新到最后状态,只保留了原来具有的元素。
是否仍然存在,如果在上述情况下显示对话框时,如果按下后退按钮,则绝对不会发生任何事情,或者至少保持与关闭时完全相同的元素,然后再次显示?
答案 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();
}
}