我有一个AlertDialog
。通过安装DialogInterface.OnCancelListener
可以取消对话框时得到通知。但是,当用户按下BACK按钮或在对话框区域之外点击时,我看不到任何阻止Android自动关闭对话框的方法。
假设每当用户尝试取消对话框时,我都想显示另一个对话框,询问“您确定要关闭此对话框吗?”。我以为可以在onCancel()
的{{1}}中实现此功能,但由于Android始终会自动关闭该对话框而无法正常工作。有没有一种方法可以阻止Android这样做,以便我可以选择是否要关闭它?
答案 0 :(得分:1)
尝试一下:
private void openMainDialog() {
new AlertDialog.Builder(this)
.setTitle("Some title")
.setMessage("Some Message")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
openOnCancelMainDialog();
}
})
.show();
}
private void openOnCancelMainDialog() {
new AlertDialog.Builder(this)
.setTitle("Warning")
.setMessage("Do you really want to close the dialog?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
openMainDialog();
}
})
.show();
}
答案 1 :(得分:0)
但是,当用户按下BACK按钮或在对话框区域之外点击时,我看不到任何阻止Android自动关闭对话框的方法。
有一种方法可以阻止这种情况,
builder.setCancelable(false);
如果这就是您想要的,那么您就明白了。如果您需要任何其他详细信息/问题,请在此处评论,因为之后您的问题仍无法清除。
答案 2 :(得分:0)
您可以仅禁用对话框的“随机”取消。使用此method。
builder.setNegativeButton("Cancel", (dialog, which) -> {
dialog.dismiss();
})
builder.setCancellable(false);
或者您可以使用此method。
AlertDialog dialog = builder.show();
dialog.setCancelableOnTouchOutside(false);
答案 3 :(得分:0)
> Try this code it works for me
private void createDialog() {
AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
alertDlg.setMessage("Are you sure you want to exit?");
alertDlg.setCancelable(false); // We avoid that the dialog can be canceled
, forcing the user to choose one of the options
alertDlg.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
TestBackActivity.super.onBackPressed();
}
}
);
alertDlg.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// We do nothing
}
});
alertDlg.create().show();
}