在 PositiveButton 内膨胀 AlertDialog 导致最后一个对话框不关闭

Inflating AlertDialog inside PositiveButton causes last dialog to not dismiss

我正在尝试打开 2 个警报对话框,例如权限,当我按下正向按钮时,第一个弹出并关闭,然后它会膨胀第二个,但是当我在第二个警报对话框上按下正向按钮时,它不会关闭并且一直显示

 private void requestXiaomiBootPermission(){

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

        builder.setTitle("Automatic boot");
        builder.setMessage("we need this permission to work");
        builder.setCancelable(false);

        builder.setPositiveButton("Allow", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int i) {
                addAutoStartup();
                requestXiaomiBackgroundPermission();
                dialog.dismiss();
            }
        }).show();


        builder.setNegativeButton("Deny", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();

        builder.setNeutralButton("do not show", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        }).show();


        builder.show();
    }


    private void requestXiaomiBackgroundPermission(){

        AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);

        builder2.setTitle("Popup window");
        builder2.setMessage("we need this permission to work");
        builder2.setCancelable(false);

        builder2.setPositiveButton("Allow", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int i) {
                addPermissionsOnBackgroud();
                dialog.dismiss(); // --> Here it does not dismiss when this dialog inflates
            }
        }).show();


        builder2.setNegativeButton("Deny", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();

        builder2.setNeutralButton("do not show", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        }).show();

        builder2.show();
    }

所以电路是这样的

我打开应用程序并弹出第一个对话框 (requestXiaomiBootPermission()),然后当我按下正向按钮 allow 它打开第二个对话框 (requestXiaomiBackgroundPermission() ) 但是当我在这个按钮上按 allow 时,dialog.dismiss() 不会关闭我的对话框并保持在那里,有什么解决办法吗?

不要在每次 setXXXXXButton() 调用后调用 show()。最后只调用一次。您正在创建 4 个启动权限对话框和 4 个后台权限对话框,它们都堆叠在一起。

您正在打开这两个对话框 4 次。在所有三个之后删除 show() 方法 button.just 将 show() 方法保留在最后。

private void requestXiaomiBootPermission(){

        AlertDialog.Builder builder = new AlertDialog.Builder(context);

        builder.setTitle("Automatic boot");
        builder.setMessage("we need this permission to work");
        builder.setCancelable(false);

        builder.setPositiveButton("Allow", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int i) {

                dialog.dismiss();
            }
        });


        builder.setNegativeButton("Deny", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        builder.setNeutralButton("do not show", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });


        builder.show();
    }