Dialog.setCanceLedOntouchoutside(true)在单击对话框外时不起作用



我使用 DialogFragment创建/显示 dialog

此外,当我单击对话外时,我想解开对话。

我尝试在创建对话后调用dialog.setCanceledOnTouchOutside(true)方法,但行不通。

我尝试了其他帖子中的一些解决方案,但仍然无法正常工作。

问题在哪里?

这是我的代码DialogSelectCategory.java

<!-- language: java -->
public class DialogSelectCategory extends DialogFragment {
    static final String tag = "DialogSelectCategory";
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Activity act = getActivity();
        AlertDialog.Builder builder = new AlertDialog.Builder(act);
        String title = getResources().getString(R.string.select_category);
        View view = LayoutInflater.from(act).inflate(R.layout.dialog_category, null, false);
        builder.setView(view);
        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                dialog.dismiss();
            }
        });
        builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                dialog.dismiss();
            }
        });
        Dialog dialog = builder.create();
        setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);
        return dialog;
    }
    public void showDialog(FragmentManager fragmentManager) {
        FragmentTransaction ft = fragmentManager.beginTransaction();
        Fragment prev = fragmentManager.findFragmentByTag(tag);
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);
        this.show(fragmentManager, tag);
    }
}  

当您使用dialogfragment显示对话框

时,问题正在发生

根据http://developer.android.com/reference/android/app/dialogfragment.html,解决方案是在DialogFragment

中覆盖onCancel
// DialogFragment, not Dialog
@Override
public void onCancel(DialogInterface dialog) {
}

最新更新