スマートフォン・ジン | Smartphone-Zine

引っ越し先→ https://smartphone-zine.com/

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