ダイアログのレイアウト用のxmlファイルは、前回と同じものをそのまま使っている。
Dialogクラスには、ビルダークラスは存在せず、直接インスタンスを生成する。
しかし、DialogクラスにはAlertDialogクラスのように、あらかじめ用意されているボタン等のウィジェットを、簡単に表示させる機能は存在しない。
あくまでも、コンテンツビューを介してウィジェットを表示する事になる。
ダイアログを再表示する必要が無い場合に、ダイアログを廃棄するにはremoveDialogメソッドを使う。
上記のダイアログを操作するメソッドを実行する事で、ダイアログの状態の変化に応じて、以下の3つイベントメソッドのどれかが呼び出される。
最初にダイアログを表示される前に各IDごとに1回だけ呼び出される。
このメソッド内で、アクティビティが管理する、ダイアログの生成をおこなうコードを記述する必要がある。
ダイアログに、setOnDismissListenerを使ってイベントリスナーを指定しなければ、呼び出されない。
以下のプログラムの例を示す。(ちょっと長いコードになってしまったが)
このプログラムは、2つチェックボックスのどちらか選択してボタンを押す事で、チェック項目に対応した2つのダイアログを操作するメソッドを実行する。
各イベントメソッドでは、どのようなタイミングでイベントが呼ばれるのかを調査するため、Logを出力するコードを挿入している。
次のプログラムを使って、ダイアログを閉じる時にどのイベントが発生するか調べてみた。
結果は、以下のようにdismissメソッドを使った場合のみ、onCancelイベントが発生しない。
通常、戻るボタンの押下は、キャンセルボタンと同意と考えられるので、これは理にかなっていると思われる。
この事を利用して、34,58、64行のコメントの位置にOk,キャンセル時の処理を実装と都合が良い。
些細な事であるが、onDismissイベントとonCancelイベントの発生するタイミングについて、 憶えておいたほうが良いかな。