Android ChildFragmentManager().findFragmentById() 始终为 null

标签 android android-fragments child-fragment

我偶然发现了一个疯狂的小“bug”,或者我只是做错了什么。我正在尝试获取对 fragment 内 fragment 的引用。所以我们有 ParentFragment,它是 MainActivity 的子级。我可以毫无问题地获得对此 ParentFragment 的引用,因为 ParentFragment 通过代码添加到 MainActivity 中:

ParentFragment fragment = new ParentFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

transaction.replace(R.id.fragmentPlaceholder, fragment);
transaction.commit();

我已经通过 XML 添加了 ChildFragmentParentFragment,如下所示:

parent_fragment.xml

<RelativeLayout ... etc>
    .. some other views, findViewById('') works great on these.
    <fragment
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:id="@+id/childFragment1"
        android:tag="1"
        class="com.my.package.ChildFragment"
        android:name="com.my.package.ChildFragment"
        tools:layout="@layout/child_fragment" />
</RelativeLayout>

一切正常,ChildFragment 显示在 ParentFragment 中。唯一的事情是;我找不到fragmentById。

我尝试了多种方法来实现这一目标,应该如何完成(?):

getChildFragmentManager().findFragmentById(R.id.childFragment1)

没用。另外,获取 Activity 并使用该 fragment 管理器不起作用(..当然)。

我还尝试获取 ChildFragmentManager 中的所有 fragment ,迭代它们等。但这总是返回 null:

getChildFragmentManager().getFragments()

您知道为什么会发生这种情况吗?如果 fragment 不是通过代码添加的,我不能使用 ChildFragrentManager 吗?

谢谢!

最佳答案

您必须动态添加子 fragment 。请参阅here :

Note: You cannot inflate a layout into a fragment when that layout includes a <fragment>. Nested fragments are only supported when added to a fragment dynamically.

ps。如果您打算使用嵌套 fragment ,那么请为各种奇怪的行为做好准备,您可以在 Android 平台的错误报告中找到它们:

https://code.google.com/p/android/issues/list?can=2&q=nested+fragment&sort=-opened&colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&cells=tiles

关于Android ChildFragmentManager().findFragmentById() 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35059822/

相关文章:

android - 创建 BaseFragment 并在 ChildFragment 中扩展此 Fragment

android - 如何以编程方式将此 fragment 添加到我的 fragment 中?

android - 如何在屏幕中央的所有小部件顶部显示 CircularProgressIndicator

java - 如何让Task定时执行?

android - 将方向从单 Pane 更改为双 Pane Fragment 布局时出现问题

android - 如何使用子 fragment 管理 Backstack?

android - 在回调 viewpager fragment on back press 时出现此错误您必须先在 child 的 parent 上调用 removeView()

java - 在eclipse上导入现有项目后突然报错ObjectSetting.java文件

Android NDK - 对 Android::Mutex、Android::AudioTrack 的 undefined reference

Android getParentFragment() 直接从布局中膨胀 fragment 时为空