确认用户是否真的要关闭对话框

时间:2018-07-10 12:55:09

标签: android android-alertdialog android-dialog

我有一个AlertDialog。通过安装DialogInterface.OnCancelListener可以取消对话框时得到通知。但是,当用户按下BACK按钮或在对话框区域之外点击时,我看不到任何阻止Android自动关闭对话框的方法。

假设每当用户尝试取消对话框时,我都想显示另一个对话框,询问“您确定要关闭此对话框吗?”。我以为可以在onCancel()的{​​{1}}中实现此功能,但由于Android始终会自动关闭该对话框而无法正常工作。有没有一种方法可以阻止Android这样做,以便我可以选择是否要关闭它?

4 个答案:

答案 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();
  }