閉じる

DialogFragmentと onCancel/onDismiss

onCreateDialogをオーバーライドして AlertDialog.Builderでダイアログを作成。
その時に OnCancelListener/OnDismissListenerを呼んでリスナーを登録するも、呼ばれることがなくて困ってしまう。
結論から言うと、これらが呼ばれることはない。
何故かと言えば、DialogFragmentが独自のリスナーで上書きしてしまうから。
どうすればいいか?
DialogFragmentの onCancel(DialogInterface dialog)/onDismiss(DialogInterface dialog)をオーバーライドするようにすればいい。
まぁ わかってしまえば簡単なことなんだけど。
ちなみに onCancel/onDismissをオーバーライドしたらちゃんとスーパークラスの同メソッドも呼び出すこと。
コレをやらないと後始末*1 がされず、見た目うまく動いているように見えても裏で思いも寄らない挙動をすることが。


*1 フラグメントマネージャから DialogFragmentを取り除く等

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)