如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?

Posted

技术标签:

【中文标题】如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?【英文标题】:How to inflate a Fragment (List) that was created by the Android studio wizard in an Activity? 【发布时间】:2020-12-25 18:44:10 【问题描述】:

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_
    android:layout_
    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_
    android:layout_
    android:orientation="horizontal">

<TextView
    android:id="@+id/item_number"
    android:layout_
    android:layout_
    android:layout_margin="@dimen/text_margin"
    android:textAppearance="?attr/textAppearanceListItem" />

<TextView
    android:id="@+id/content"
    android:layout_
    android:layout_
    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 中为 Wizard 创建的 Fragment (List) 充气?为什么我的方法不起作用?

【问题讨论】:

【参考方案1】:

您的Activitys 布局中应该有一些ViewGroup,例如RelativeLayout,这将是您的 Fragment 的容器。您正在将RecyclerView 设置为容器,这将不起作用,因为该项目不是正确的容器并且根本没有添加到Activity(所以Exception 中的No view found for id)。 RecyclerViewFragments 布局的一部分(在创建和添加之后),您在其中实现了Adapter。当Fragment 运行并且您在尝试添加Fragment 时在线崩溃时可用

.add(R.id.list, new ItemFragment()) - 将R.id.list 替换为在Activity 中膨胀的容器ID(布局传递给setContentView

【讨论】:

好的,这不完全是答案,但它有所帮助,所以我会接受它。通过引用 (android:name=) 到 Fragment Java 类,将 xml 片段元素添加到我的主 xml 中得到它的工作 你从来没有说过你只需要一个固定的Fragment 一直连接一次...... ;) 你已经使用了FragmentTransaction,所以我认为你需要一些“动态”在运行时交换Fragments 的方式。最重要的是 Fragment 现在正在为你工作 :) 祝你好运!

以上是关于如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?的主要内容,如果未能解决你的问题,请参考以下文章

膨胀布局以提醒对话框android studio

Android Studio:膨胀类片段时出错

如何安装android studio

Android Studio 设置向导 - 创建 Android 虚拟设备

二进制 XML 文件第 2 行:在 android<21 in android studio 中膨胀类 android.support.v7.widget.CardView 时出错

Android Studio / Intellij 新建项目向导