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

ダイアログを開いて、少々こみいった処理をする場合、Backキーでダイアログをキャンセルされたくないことが多々あります。
そのような場合、従来の(フラグメントを使わない)方法では、AlertDialogにsetCancelable(false)などとしていました。
DialogFragmentでも同じだろうと、onCreateDialogメソッド内でsetCancelable(false)をして、これで一安心と思っていたら、Backキーでキャンセルできちゃうではありませんか。
こんなコードだとBackキーでキャンセルできちゃう
[java highlight_lines=”7″]
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();
}
}
[/java]
DialogFlagmentの場合、いくらダイアログ本体にsetCancelable(false)をしても効かない様子。正しくは、DialogFlagment#setCancelable(false)としなければいけなようです。
正しくはDialogFlagmentの方にsetCancelable(false)を行う
[java highlight_lines=”2″]
DateErrorDialogFragment dialog = new DateErrorDialogFragment();
dialog.setCancelable(false);
dialog.show(getSupportFragmentManager(), “date_error”);
[/java]
こうすれば、Backキーでダイアログがキャンセルされなくなりました。
元ネタはこちら。
http://stackoverflow.com/questions/10171822/android-how-to-prevent-the-back-button-from-cancelling-a-fragmentdialog

上部へスクロール