java - 如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?
问题描述
在 Android Studio (v.4.0.1) File -> New -> Fragment -> Fragment (List) 中创建一个包含所有所需组件(适配器、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”内,因为我收到以下堆栈跟踪错误:
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,我在其他答案中看到了这一点,但这也不起作用。
那么如何在我的活动中为向导创建片段(列表)充气,为什么我的方法不起作用?
解决方案
你应该ViewGroup
在你Activity
的布局中有一些,例如RelativeLayout
,这将是你的容器Fragment
。您正在设置RecyclerView
为容器,这将不起作用,因为该项目不是正确的容器并且根本没有添加Activity
(所以No view found for id
在 中Exception
)。RecyclerView
是Fragment
s 布局的一部分(在创建和添加之后),您在其中实现了Adapter
. 将在何时Fragment
运行并且您正在尝试添加的在线崩溃时可用Fragment
.add(R.id.list, new ItemFragment())
- 替换R.id.list
为膨胀的容器 id Activity
(布局传递给setContentView
)
推荐阅读
- c# - ServiceController 异常(无法控制计算机“.”上的服务。)
- html - Material UI Textfield 打印不正确
- hash - 将签名哈希集成到原始 PDF
- macos - 如何使 Visual Studio Code 使用 ~/.zshrc 中的配置,使其适用于 NPM 脚本?
- javascript - 如何从普通的 DOM 访问 Vue 组件
- python - Python requests.get() 返回空结果
- android - 将内部文本文件附加到 Gmail
- javascript - 测验结束时如何显示错误答案?
- javascript - 如何在 JavaScript asp.net 中序列化表单
- laravel - 如何在 laravel 项目中使用苹果功能管理登录?