DialogFragmentではsetCancelableはフラグメントに対して行う

ダイアログを開いて、少々こみいった処理をする場合、Backキーでダイアログをキャンセルされたくないことが多々あります。

そのような場合、従来の(フラグメントを使わない)方法では、AlertDialogにsetCancelable(false)などとしていました。

DialogFragmentでも同じだろうと、onCreateDialogメソッド内でsetCancelable(false)をして、これで一安心と思っていたら、Backキーでキャンセルできちゃうではありませんか。

こんなコードだとBackキーでキャンセルできちゃう

   public static class DateErrorDialogFragment extends DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
            dialog.setMessage("ダイアログです!");
            dialog.setPositiveButton(getString(R.string.OKAnswer), null);
            dialog.setCancelable(false);
            return dialog.create();
        }
    }

DialogFlagmentの場合、いくらダイアログ本体にsetCancelable(false)をしても効かない様子。正しくは、DialogFlagment#setCancelable(false)としなければいけなようです。

正しくはDialogFlagmentの方にsetCancelable(false)を行う

DateErrorDialogFragment dialog = new DateErrorDialogFragment();
dialog.setCancelable(false);
dialog.show(getSupportFragmentManager(), "date_error");

こうすれば、Backキーでダイアログがキャンセルされなくなりました。

元ネタはこちら。
http://stackoverflow.com/questions/10171822/android-how-to-prevent-the-back-button-from-cancelling-a-fragmentdialog

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です