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

问题描述 投票:57回答:6

我创建了一个正常工作的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。

android alertdialog
6个回答
119
投票

this是您的完整代码吗?那么请改变你的代码来设置这样的setCancelable(false)

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

11
投票

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


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


5
投票
dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

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


1
投票

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

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

0
投票

在Kotlin中,不允许对话

dialog.isCancelable =false
© www.soinside.com 2019 - 2024. All rights reserved.