ローディングのくるくるダイアログとか DialogFragment とかって出すことは、まあよくあると思う。そんな感じで出してたら NullPointerException でた。
こんな感じのとこ。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ダイアログ出すとこは | |
// this.mLoadingDialog = LoadingDialog.newInstance("ちょっとまってねっ!"); | |
// っていう感じでメンバ変数に入れといてる。 | |
if (this.mLoadingDialog != null) { | |
this.mLoadingDialog.dismiss(); // ここでぬるぽ | |
} |
いやいや、null じゃなければって言ってるでしょ?どうも DialogFragment の中で何かが null っぽい(例外メッセージ忘れた)なので、こう変えた。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ダイアログ出す時 | |
FragmentManager fragmentManager = this.getSupportFragmentManager(); | |
LoadingDialog dialogFragment = LoadingDialog.newInstance("ちょっとまってねっ!"); | |
dialogFragment.show(fragmentManager, LoadingDialog.DIALOG_TAG); | |
// ダイアログ消す時 | |
FragmentManager fragmentManager = this.getSupportFragmentManager(); | |
Fragment fragment = fragmentManager.findFragmentByTag(LoadingDialog.DIALOG_TAG); | |
if (fragment != null && fragment instanceof DialogFragment) { | |
((DialogFragment)fragment).dismiss(); | |
} |
TAG を指定して生成、消すときも TAG 指定で取得、fragment が帰ってくるから一応 null チェックとそいつが DialogFragment かどうかを見て、dismiss() 呼び出す。これで一応 NullPointerException はなくなりました。ここらへんどうなんだろうかっていうのはある。ドキュメント見てもshow() の例は書いてるけど dismiss() の例もないものね。
追記
12-03 17:57:12.331: E/AndroidRuntime(5279): java.lang.NullPointerException
12-03 17:57:12.331: E/AndroidRuntime(5279): at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:184)
12-03 17:57:12.331: E/AndroidRuntime(5279): at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:155)
こんなかんじの例外でした。