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

lup*_*oem 62 android 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();
Run Code Online (Sandbox Code Playgroud)


环境:XP Professional上的Android 4.0.

San*_*ndy 122

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

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

  • 全部 - 因为它可能对你有所帮助,提供这个信息 - "setCancelable(false)"在上面的代码中不起作用,因为`AlertDialog`创建是`DialogFragment`类的一部分.请点击上面答案中的"this"链接,该链接指向完整代码.从`DialogFragment`类描述 - "这个片段包含一个Dialog对象,根据片段的状态显示它.控制对话框(决定何时显示,隐藏,关闭它)应该通过API在这里完成,而不是直接调用对话框." (16认同)

小智 12

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


Krz*_*uba 8

另一个工作示例:

步骤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();
   }
}
Run Code Online (Sandbox Code Playgroud)

第2步

添加方法到您的Activity:

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

第3步

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


Dor*_*ean 5

dialog.setCanceledOnTouchOutside(false);
Run Code Online (Sandbox Code Playgroud)

setCanceledOnTouchOutside(boolean)

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