当DialogFragment显示时禁用底层视图的触摸事件

3

我有一个PreferenceFragment,一切都准备好了,我显示一个DialogFragment来显示加载进度。问题是,如果我在底层片段中点击偏好设置元素,点击事件仍在处理。

有没有办法在我的DialogFragment显示时禁用事件?

我的DialogFragment是从PreferenceFragment本身构建和启动的:

 final DialogFragment fragment = new DialogFragment() {
                @Override
                public Dialog onCreateDialog(final Bundle savedInstanceState) {
                    final Dialog dialog = new AlertDialog.Builder(getActivity())
                            .setTitle(R.string.dialog_hide_user_title)
                            .setMessage(R.string.dialog_hide_user_summary)
                            .setPositiveButton(R.string.dialog_hide_user_confirm_button, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(final DialogInterface dialogInterface, final int i) {
                                    callback.onPositiveClick();
                                }
                            })
                            .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(final DialogInterface dialogInterface, final int i) {
                                    callback.onNegativeClick();
                                }
                            })
                            .create();
                    dialog.setCanceledOnTouchOutside(false);
                    return dialog;
                }
            };
fragment.show(getFragmentManager(), "test");
3个回答

4

尝试

setCancelable(false);
dialog.setCanceledOnTouchOutside(false);

希望这有所帮助 :)
完整代码:
final DialogFragment fragment = new DialogFragment() {
                @Override
                public Dialog onCreateDialog(final Bundle savedInstanceState) {
                    final Dialog dialog = new AlertDialog.Builder(getActivity())
                            .setTitle(R.string.dialog_hide_user_title)
                            .setMessage(R.string.dialog_hide_user_summary)
                            .setPositiveButton(R.string.dialog_hide_user_confirm_button, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(final DialogInterface dialogInterface, final int i) {
                                    callback.onPositiveClick();
                                }
                            })
                            .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(final DialogInterface dialogInterface, final int i) {
                                    callback.onNegativeClick();
                                }
                            })
                            .create();
                    setCancelable(false);
                    dialog.setCanceledOnTouchOutside(false);
                    return dialog;
                }
            };
fragment.show(getFragmentManager(), "test");

1
它不起作用。它仍然启动底层首选项的onClick处理程序中定义的任何内容。 - Dan
我修改了我的回答。我刚刚使用 setCancelable(false) 测试了你的代码。它在我这里运行良好。希望它也能在你那里正常工作。编写愉快! - Ye Min Htut

2
您只需要将基本布局视图设置为可点击即可:
android:clickable="true"

0

我在我的主活动中编写了这个并且它运行正常。

 private void myDy() {
     FragmentManager manager = getSupportFragmentManager();
     TimerDialogFrag dialog = new TimerDialogFrag();
      dialog.setCancelable(false);
     dialog.show(manager, DIALOG_DATE);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接