2

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

ParentFragment fragment = new ParentFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

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

我已经像这样ChildFragmentParentFragmentvia XML 添加了一个:

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(s) 显示在 ParentFragment 中。唯一的事情是;我找不到 fragmentById。

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

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

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

我也尝试在 ChildFragmentManager 中获取所有片段,对其进行迭代等。但这总是返回 null:

getChildFragmentManager().getFragments()

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

谢谢!

4

2 回答 2

5

您必须动态添加您的子片段。见这里

注意:当布局包含 <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

于 2016-01-28T11:37:10.303 回答
0

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

我将 all 更改getSupportFragmentManager()为并用常规getFragmentManager()替换 all 。FragmentActivityActivity

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

于 2016-01-28T11:55:47.527 回答