Programming

AndroidのAlertDialogで躓いた話

Programming
スポンサーリンク

どうも、Reveです。
最近Androidアプリの開発をする機会がぐんと増えたのですが、なんか初歩的なところで躓いていたので備忘録でも残します。
【ボタンを押すとエラーで落ちる】
エラーが発生したのは、ボタン(FAB)を押すとAlertDialogが呼ばれる機能を実装していた時のことで、
ビルドは通るものの実行してボタンを押すと、以下のエラーが発生して強制終了してしまいました。
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
どうやらTheme.AppCompatというテーマを適用する必要があると…
かれこれ色々悩んでいたのですが、原因はAlertDialog.Builderを作る際のContextにありました。
【原因】
AlertDialog.Builderのインスタンスを作る際、引数にContextを指定する必要があるのですが、
これが曲者で、間違えてApplicationContextを指定していたのが原因でした。

正確には、builder.show()を実行してダイアログを表示するときにエラーが発生するのですが、getApplicationContextで得られるContextでは、どうやらテーマのリソースにアクセスできないようでした。
そのため、ActivityのContextを取得することでエラーが解消された、とみています。
いや、Androidアプリの開発はめんどくさい…(ただの勉強不足)
【参考】
ちなみに、対処法はここで見つけました。
(stack overflow: Android AlertDialog error during showing)
https://stackoverflow.com/questions/41894944/android-alertdialog-error-during-showing
どうやら、以前にも、同じような現象に陥っていた方がいらっしゃいました。
(SLUMBERS: Android で アラートダイアログを表示しようとすると落ちる)
http://slumbers99.blogspot.jp/2012/01/android.html
また、こちらの記事では各Contextの違いについてまとめられており、記事の内容からテーマのリソースなどを参照するにはActivityのContextが必要で、getApplicationContextでは取得できないと推察しているのですが、果たして正解なのか…
(Yukiの枝折: Android:引数はthisか?getApplicationContextか?ActivityとApplicationの違い)
http://yuki312.blogspot.jp/2012/02/thisgetapplicationcontextactivityapplic.html

コメント

タイトルとURLをコピーしました