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


70

我创建了一个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。


您可以上传您的代码吗?
路西法

“ .setCancelable(false)”位于代码的第四行。
lupchiazoem 2012年

setNegativeButton()如果不想取消对话框,为什么要放置零件?
Anasthase 2012年

@Anasthase-我想捕获用户的回答,是或否。
lupchiazoem 2012年

1
dialog.setCanceledOnTouchOutside(false)
Mirza Adil

Answers:


136

这个你完整的代码?然后请更改您的代码以进行setCancelable(false)此类设置

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

是的,确实有帮助。非常感谢您的回答。实际上,我正在起草一个答复,而您已经发布了您的答复。
lupchiazoem 2012年

18
全部-可能会帮助您,提供此信息-setCancelable(false)在上述代码中不起作用,因为AlertDialog创建是DialogFragment类的一部分。请点击上方答案中的“此”链接,指向完整代码。在DialogFragment类描述中-“此片段包含一个Dialog对象,它根据片段的状态适当显示。对话框的控制(决定何时显示,隐藏,关闭它)应该通过此处的API进行,而不是直接调用在对话框上。”。
lupchiazoem

链接断开。尝试表达不依赖于外部来源的答案
Nilzor

13

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


如果希望对话框可取消,请在其外部单击,也要通知它已被取消,请设置setCancelable(true)并重写Dialogs cancel方法。@Override public void cancel(){
pstorli

9

另一个工作示例:

第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;
}

第三步

showDialog()需要显示对话框时致电



2

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

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


0

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

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

要么

AlertDialog alertDialog = builder.create();

alertDialog.setCancelable(false);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.