DialogFragment setCancelable属性不起作用

Aru*_*run 95 android android-dialogfragment

我在Android应用程序中工作,并使用DialogFragment显示对话框,我想使DialogFragment不可取消.我已将对话框cancelable属性设置为false,但仍然没有影响.

请查看我的代码并建议我一个解决方案.

public class DialogTest extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return super.onCreateDialog(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_test, container, true);
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        getDialog().setCancelable(false);

        return view;
    }
 }
Run Code Online (Sandbox Code Playgroud)

Bla*_*elt 221

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.dialog_test, container, true);
    getDialog().requestWindowFeature(STYLE_NO_TITLE);
    getDialog().setCancelable(false);

    return view;
}
Run Code Online (Sandbox Code Playgroud)

而不是getDialog().setCancelable(false);你必须直接使用setCancelable(false);

所以更新的答案将是这样的

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.dialog_test, container, true);
    getDialog().requestWindowFeature(STYLE_NO_TITLE);
    setCancelable(false);

    return view;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是小费.一个片段正在包装你的对话框,你必须处理片段而不是对话本身是正常的;) (7认同)
  • 不为我工作。单击后退按钮时,对话框仍然会被关闭。 (2认同)

Usm*_*urd 48

使用以下代码段

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)

如果要禁用外侧触摸对话框,请使用以下代码行

DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Run Code Online (Sandbox Code Playgroud)


Xen*_*one 28

如果您使用警报构建器(并且可能在每种情况下都在DialogFragment中包装对话框)来帮助构建对话框,请不要使用getDialog().setCancelable(false)或Dialog.setCancelable(false)因为它不会工作. 使用setCancelable(false),如下面的代码所示,正如在官方android文档中提到的那样:

public void setCancelable (boolean cancelable)
Run Code Online (Sandbox Code Playgroud)

在API级别11中添加控制所显示的Dialog是否可取消.使用它而不是直接调用Dialog.setCancelable(boolean),因为DialogFragment需要根据它改变它的行为."

参考:http://developer.android.com/reference/android/app/DialogFragment.html#setCancelable(boolean)

public class MyDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_layout, null, false);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
                .setTitle("in case you want use a title").setView(view);

        AlertDialog alert = builder.create();
        // alert.setCancelable(false); <-- dont' use that instead use bellow approach
        setCancelable(false); <-  press back button not cancel dialog, this one works fine
        alert.setCanceledOnTouchOutside(false); <- to cancel outside touch

        return alert;
}
Run Code Online (Sandbox Code Playgroud)