PositiveButton内部的AlertDialog膨胀导致上一个对话框无法关闭

问题描述 投票:0回答:2

我正在尝试打开2个警报对话框,如权限,当我按下positiveButton时,第一个对话框弹出并关闭,然后它使第二个对话框膨胀,但是当我在第二个Alertdialog上按PositiveButton时,它并没有显示并继续显示它

 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()),然后当我按下positiveButton allow时,它将打开第二个对话框(requestXiaomiBackgroundPermission()),但是当我在此按下allow时第一,dialog.dismiss()不会关闭我的对话框并保留在那里,有什么解决方法吗?

java android android-alertdialog android-dialog
2个回答
0
投票

在每个show()调用之后都不要调用setXXXXXButton()。最后,只需调用一次即可。您正在创建4个引导权限对话框和4个后台权限对话框,它们都彼此堆叠在一起。


0
投票

您同时打开两个对话框。在所有三个按钮之后都删除show()方法。只需在最后保留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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.