メモ:Androidでダイアログ表示
Androidにて、ダイアログの表示とクローズについて実装方法を確認しました。
実装ポイントとしては、次の通りです。
- DialogFragmentを継承したクラスを使う。
- このクラスでonCerateDialog()をオーバライドして、表示するダイアログを返す。
- 表示したダイアログを閉じる際に、ダイアログのdismiss()ではなく、継承クラスのdismiss()(つまりDialogFragment#dismiss())を呼ぶ。
特に3番目を実施しないと、次のような現象が発生しました。
- ダイアログのOKボタンを押し、画面を回転させた後に、ダイアログが復活する。
- ダイアログのOKボタンを押しても、ダイアログが消えない。
DialogFragmentは、ダイアログの状態を保存するためにフラグメントのしくみを使用しています。
DialogFragmentを表示すると、フラグメントがバックスタックに格納されます。
ダイアログのOK(Cancel)ボタンを押すと、ダイアログ自体は消えますが、DialogFragment#dismiss()を呼ばれるまで、フラグメントがバックスタックに残り続けるため、例えば画面を回転させて、再描画を発生させると、ダイアログが再表示されてしまいます。
ソースコードはこちらです。https://github.com/hrk4649/android_samples/
(参考)
- ダイアログ https://developer.android.com/guide/topics/ui/dialogs?hl=ja#ShowingADialog
- How to correctly dismiss a DialogFragment? https://stackoverflow.com/questions/11201022/how-to-correctly-dismiss-a-dialogfragment