diadia

興味があることをやってみる。自分のメモを残しておきます。

エラー: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)で使う内容が一致していなければならない。