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

y1aodyip  于 2022-10-09  发布在  Android
关注(0)|答案(9)|浏览(197)

我已经创建了一个工作正常的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专业版上的Android 4.0。

dwthyt8l

dwthyt8l1#

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

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

q0qdq0h22#

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

xdnvmnnf

xdnvmnnf3#

dialog.setCanceledOnTouchOutside(false);

setCanceledOnTouchOutside(boolean)

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

lnlaulya

lnlaulya4#

另一个实用示例:

第一步

创建类:

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

第二步

将方法添加到Activity

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

第三步

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

lh80um4z

lh80um4z5#

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

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

nlejzf6q6#

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

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

AlertDialog alertDialog = builder.create();

alertDialog.setCancelable(false);
raogr8fs

raogr8fs7#

在对话框片段中

二手:-

dialog.setCanceledOnTouchOutside(false)

jjjwad0x

jjjwad0x8#

在Kotlin中,用于使对话不可驳回

dialog.isCancelable = false
wkyowqbh

wkyowqbh9#

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

相关问题