【问题标题】:Disable touch events on underlying views while DialogFragment is showing up在显示 DialogFragment 时禁用底层视图上的触摸事件
【发布时间】:2015-08-03 17:17:01
【问题描述】:

我有一个 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");

【问题讨论】:

    标签: android dialog android-dialogfragment


    【解决方案1】:

    试试

    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");
    

    【讨论】:

    • 它不起作用。它仍然会启动底层首选项的 onClick 处理程序中定义的任何内容
    • 我编辑了我的答案。我刚刚用 setCancelable(false) 测试了你的代码。这对我来说可以。我希望它会奏效。编码愉快。
    【解决方案2】:

    您只需将基本布局视图设置为可点击:

    android:clickable="true"
    

    【讨论】:

      【解决方案3】:

      我在我的主要活动中写了这个并且它有效

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2014-07-24
        • 1970-01-01
        相关资源
        最近更新 更多