问题描述
在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" />
我尝试用:
getSupportFragmentManager().beginTransaction().add(R.id.list,new ItemFragment()).commit();
或
getSupportFragmentManager().beginTransaction().add(R.id.list,ItemFragment.newInstance(1)).commit();
我知道该错误位于'R.id.list'内,因为我收到以下stacktrace错误:
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,我在其他答案中也看到了这一点,但这也不起作用。
那我该如何在该向导中为该向导创建的Fragment(列表)充气,为什么我的方法无效?
解决方法
ViewGroup
的布局中应该有一些Activity
,例如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
)