エラー:java.lang.IllegalArgumentException: No view found for id がFragment.kt内で生じる件
エラー内容
java.lang.IllegalArgumentException: No view found for id
解決に役立った資料
Android Fragment no view found for ID? - Stack Overflow
エラーが生じた環境
フラグメントを複数生成し、生成したフラグメントを起動する際にエラーが生じた。またスマホの他、タブレットに対応する為フラグメント.ktファイル内で別のflamelayoutを使用することを指定していた。
エラーが生じた際のコード
EditActivity.kt
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_detail) setSupportActionBar(toolbar) supportFragmentManager.beginTransaction() .add(R.id.container_detail, DetailFragment.newInstance(title, deadline, taskDetail, isCompleted)) .commit() }
activity_edit.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".EditActivity"> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </com.google.android.material.appbar.AppBarLayout> <!-- ここがエラー原因 --> <include layout="@layout/content_edit" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" app:srcCompat="@android:drawable/ic_dialog_email" /> </androidx.coordinatorlayout.widget.CoordinatorLayout>
エラー対処
Activityでフラグメントを起動する際にinclude layout="@layout/content_edit" ではなく、include layout="@layout/content_detail"に変更しなければならない。 フラグメントを生成すると、container_hoge.xml内のincludeタグはcontent_hogeで生成される。ここの内容とFragmentoを生成するロジック(Activity)で使う内容が一致していなければならない。