AlertDialog的setCancelable(false)方法不起作用



我创建了一个AlertDialog,它运行良好。它正在消失,如果我按下:
1) 转义键盘按钮或
2) 使用鼠标后退按钮
为了使它即使在上述条件下也能保持专注,我在构建时添加了".setCanceable(false)"语句。但是,我仍然看到对话消失了。问题出在哪里?请帮忙

添加的代码:

return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setCancelable(false)
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();


环境:XP Professional上的Android 4.0。

这是您的完整代码吗?那么请更改您的代码,以便像这个一样设置setCancelable(false)

void showDialog() {
    DialogFragment newFragment = MyAlertDialogFragment.newInstance(
            R.string..alert_dialog_two_buttons_title);
    newFragment.setCancelable(false);
    newFragment.show(getFragmentManager(), "dialog");
}

您的对话框被设置为不可取消,但您的主机片段仍然是可取消的。用setCancelable(false)设置碎片。

dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

设置在窗口边界之外触摸时是否取消此对话框。如果设置为true,则对话框设置为可取消(如果尚未设置)。

另一个工作示例:

步骤1

创建类:

public class DialogActivity extends android.app.DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.myMessage);
        setCancelable(false);
        return builder.create();
   }
}

步骤2

将方法添加到Activity:

private boolean showDialog() {
    FragmentManager manager = getFragmentManager();
    DialogActivity dialogActivity;
    dialogActivity = new DialogActivity();
    dialogActivity.show(manager, "DialogActivity");
    return true;
}

步骤3

需要显示对话框时调用showDialog()

实现"setCancelable"最简单的方法是在活动中调用对话框时实现相同的方法;这样,就不会直接在对话框类中。

 Dialog myDialog = new Dialog();
        myDialog.setCancelable( false );
        myDialog.show( getSupportFragmentManager(),"dialog" );
        return true;

在对话框中片段

已使用:-

dialog.setCanceledOnTouchOutside(false)

在Kotlin中使对话框不可丢弃

dialog.isCancelable = false

根据您的AlertDialog类型,您可以:

AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.MyAlertDialogLayout).setCancelable(false);

AlertDialog alertDialog = builder.create();
alertDialog.setCancelable(false);
        builder.setTitle("There's a problem")
                .setMessage(error)
                .setCancelable(true)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                })
                .setNegativeButton("", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                })
                .show();
            });

最新更新