避免在按下后退按钮时关闭 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();
}
}
我有一个 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();
}
}