ダイアログのキャッシュを削除する方法
作っているアプリでダイアログ呼び出し時のIDが同一で、内容が異なるものが存在した。しばらく気づかなかったのだが、ダイアログの内容が画面表示の値と異なるパターンがあるのに気づいた。エミュレータでは再現しなかったが、実機では再現する。ブレークポイントを仕掛けていろいろ試すと、一度表示したダイアログはキャッシュされるようだ。これならエミュレータでも再現するはずなんだがと思ったが、原因がわかったのでそっちを追求するのは止めた。
ぐぐってみると解決策がいくつかあった。
- 異なるダイアログ用のIDを割り当てる
- Activity#onPrepareDialog(int, android.app.Dialog, android.os.Bundle)
- Activity#removeDialog(int)
今回はremoveDialogが一番変更が少ないのでダイアログを閉じるところで使用した。何度か同じダイアログを呼び出したときに引っかかるような感じがする。しかし、アプリのライフサイクルの中で利用したとしても一度ぐらいなので問題になることはないだろう。逆にリソースを解放するっぽいので良さそうな気がする。