前提・実現したいこと
Androidのdevelopersドキュメントのトーストの概要
で紹介されていますカスタムのトーストビューの作成をKotlinで書いています。カスタマイズしたトーストを表示しようとするとソースコード「val container: ViewGroup = findViewById(R.id.custom_toast_container) 」の行を実行時に、下記の「問題が発生したため・・・」というエラーメッセージがスマホの実機に表示されてしまいます。この原因と対策方法をご教示ください。
発生している問題・エラーメッセージ
「問題が発生したため○○アプリを終了します」 Logcatで表示されたエラーメッセージは以下になります。 12-18 18:14:10.474 8847-8847/com.cosmoserv.listviewsample E/AndroidRuntime: FATAL EXCEPTION: main Process: com.cosmoserv.listviewsample, PID: 8847 java.lang.IllegalStateException: findViewById(R.id.custom_toast_container) must not be null at com.cosmoserv.listviewsample.MainActivity$ListItemClickListener.onItemClick(MainActivity.kt:30) at android.widget.AdapterView.performItemClick(AdapterView.java:310) at android.widget.AbsListView.performItemClick(AbsListView.java:1188) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3231) at android.widget.AbsListView$3.run(AbsListView.java:4165) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5637) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
該当のソースコード
xml
1(layout/custom_toast.xml として保存) 2<?xml version="1.0" encoding="utf-8"?> 3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:id="@+id/custom_toast_container" 6 android:orientation="horizontal" 7 android:layout_width="fill_parent" 8 android:layout_height="fill_parent" 9 android:padding="8dp" 10 android:background="#DAAA" 11 > 12 13 <ImageView 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_marginRight="8dp" 17 app:srcCompat="@mipmap/ic_launcher" /> 18 <TextView android:id="@+id/text" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:textColor="#FFF" 22 /> 23</LinearLayout>
Kotlin
1 //リストがタップされた時の処理が記述されたメンバクラス。 2 private inner class ListItemClickListener : AdapterView.OnItemClickListener { 3 override fun onItemClick(parent: AdapterView<*>, view1: View, position: Int, id: Long) { 4 //カスタムトーストビューの表示。 5 val inflater = layoutInflater 6 val container: ViewGroup = findViewById(R.id.custom_toast_container) //←ここで問題が発生。 7 val layout: View = inflater.inflate(R.layout.custom_toast, container) 8 val text: TextView = layout.findViewById(R.id.text) 9 text.text = "This is a custom toast" 10 with (Toast(applicationContext)) { 11 setGravity(Gravity.CENTER_VERTICAL, 0, 0) 12 duration = Toast.LENGTH_LONG 13 view = layout 14 show() 15 } 16 } 17 }
試したこと
ドキュメントで紹介されているサンプルコードとほとんど、同じコーディングにしています。Android Studioで指摘されたエラー(ViewGroupをViewに変更など)は修正しています。
Android Studioのデバッガでステップ実行すると、いつも上記の行でエラーになります。
補足情報(FW/ツールのバージョンなど)
Language : Kotlin
Minimum API level :API 15: Android 4.0.3 (IceCreamSandwich)
Android Studio 3.5.2
JRE: 1.8.0_202-release-1483-b03 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
スマホ実機 機種
Plus One Japan Limited FTJ152A
Androidバージョン 5.1
回答1件
あなたの回答
tips
プレビュー