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

时间:2012-01-18 06:49:16

标签: android alertdialog

我创建了一个正常运行的AlertDialog。如果我按下它就会消失:
1)退出键盘按钮或
2)使用鼠标的后退按钮
为了使其在上述条件下保持专注,我添加了“.setCancelable(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。

8 个答案:

答案 0 :(得分:115)

this是您的完整代码吗?然后请更改您的代码,以便像这样设置setCancelable(false)

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

答案 1 :(得分:11)

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

答案 2 :(得分:7)

另一个工作示例:

第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()

答案 3 :(得分:3)

dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

  

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在Kotlin中使对话框不可关闭

dialog.isCancelable =false

答案 6 :(得分:0)

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

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

AlertDialog alertDialog = builder.create();

alertDialog.setCancelable(false);

答案 7 :(得分:0)

在DialogFragment中

已使用:-

dialog.setCanceledOnTouchOutside(false)