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

时间:2016-01-28 11:09:15

标签: android android-fragments child-fragment

我偶然发现了一个疯狂的小'虫',或者我只是做错了什么。我试图获取片段内部的片段的引用。我们有ParentFragment,这是MainActivity的孩子。我可以毫无问题地获得对此ParentFragment的引用,因为ParentFragment已通过代码添加到MainActivity

ParentFragment fragment = new ParentFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

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

我已经通过XML向ChildFragment添加了ParentFragment,如下所示:

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)

没用。此外,获取活动并使用该片段管理器不起作用(当然)。

我也试过在ChildFragmentManager中获取所有片段,迭代它们等等。但是这总是返回null:

getChildFragmentManager().getFragments()

你知道为什么会这样吗?如果没有通过代码添加片段,我不能使用ChildFragrentManager吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

您必须动态添加子片段。见here

  

注意:在布局时,您无法将布局扩展为片段   包括&lt;片段&gt;。仅在添加时支持嵌套片段   一个动态的片段。

PS。如果你打算使用嵌套片段然后为各种奇怪的行为做好准备,你可以在android平台的bug报告中找到它们:

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

答案 1 :(得分:0)

如果您想使用嵌套片段并且能够通过findFragmentById获取对它们的引用,则无法使用支持包。

我已将所有getSupportFragmentManager()更改为getFragmentManager(),并将所有FragmentActivity替换为常规Activity

现在它按预期工作,只需拨打getChildFragmentManager().findFragmentById()