如何在 Activity 中膨胀由 Android 工作室向导创建的片段(列表)?
How to inflate a Fragment (List) that was created by the Android studio wizard in an Activity?
在 Android Studio (v.4.0.1) 文件 -> 新建 -> 片段 -> 片段(列表)
创建一个包含所有所需组件(适配器、XML 等)的虚拟列表。当保留向导给出的默认名称时,它会创建这些 xml 个文件:
fragment_item_list.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView 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:id="@+id/list"
android:name="de.afu.development.test.afu_portfolio_searcher_app_test.ItemFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context=".ItemFragment"
tools:listitem="@layout/fragment_item" />
和fragment_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/item_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
我不知道如何在我的 Activity 中膨胀 Fragment,我试过 :
getSupportFragmentManager().beginTransaction().add(R.id.list, new ItemFragment()).commit();
或
getSupportFragmentManager().beginTransaction().add(R.id.list, ItemFragment.newInstance(1)).commit();
我知道错误在 'R.id.list' 内,因为我收到以下堆栈跟踪错误:
java.lang.IllegalArgumentException: No view found for id 0x7f....:id/list) for fragment ItemFragment ...
'R.id.list'是向导给RecyclerView的ID。
我还尝试将 fragment_item_list.xml 和 fragment_item.xml 包装到 FrameLayout 中并从 Framelayout 中调用 R.id.blabla,我在其他答案中看到了这一点,但这也没有用。
那么我该如何膨胀向导在我的 Activity 中创建的片段(列表),为什么我的方法不起作用?
您的 Activity
布局中应该有一些 ViewGroup
,例如RelativeLayout
,这将是您 Fragment
的容器。您正在将 RecyclerView
设置为容器,这不会起作用,因为该项目不是合适的容器并且根本没有添加到 Activity
(所以 No view found for id
在 Exception
中)。 RecyclerView
是 Fragment
布局的一部分(在创建和添加之后),您在其中实现了 Adapter
。将在 Fragment
将 运行 并且您在尝试添加 Fragment
的线上崩溃时可用
.add(R.id.list, new ItemFragment())
- 将 R.id.list
替换为您在 Activity
中膨胀的容器 ID(布局传递给 setContentView
)
在 Android Studio (v.4.0.1) 文件 -> 新建 -> 片段 -> 片段(列表) 创建一个包含所有所需组件(适配器、XML 等)的虚拟列表。当保留向导给出的默认名称时,它会创建这些 xml 个文件:
fragment_item_list.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView 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:id="@+id/list"
android:name="de.afu.development.test.afu_portfolio_searcher_app_test.ItemFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context=".ItemFragment"
tools:listitem="@layout/fragment_item" />
和fragment_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/item_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
我不知道如何在我的 Activity 中膨胀 Fragment,我试过 :
getSupportFragmentManager().beginTransaction().add(R.id.list, new ItemFragment()).commit();
或
getSupportFragmentManager().beginTransaction().add(R.id.list, ItemFragment.newInstance(1)).commit();
我知道错误在 'R.id.list' 内,因为我收到以下堆栈跟踪错误:
java.lang.IllegalArgumentException: No view found for id 0x7f....:id/list) for fragment ItemFragment ...
'R.id.list'是向导给RecyclerView的ID。
我还尝试将 fragment_item_list.xml 和 fragment_item.xml 包装到 FrameLayout 中并从 Framelayout 中调用 R.id.blabla,我在其他答案中看到了这一点,但这也没有用。
那么我该如何膨胀向导在我的 Activity 中创建的片段(列表),为什么我的方法不起作用?
您的 Activity
布局中应该有一些 ViewGroup
,例如RelativeLayout
,这将是您 Fragment
的容器。您正在将 RecyclerView
设置为容器,这不会起作用,因为该项目不是合适的容器并且根本没有添加到 Activity
(所以 No view found for id
在 Exception
中)。 RecyclerView
是 Fragment
布局的一部分(在创建和添加之后),您在其中实现了 Adapter
。将在 Fragment
将 运行 并且您在尝试添加 Fragment
.add(R.id.list, new ItemFragment())
- 将 R.id.list
替换为您在 Activity
中膨胀的容器 ID(布局传递给 setContentView
)