我偶然发现了一个疯狂的小'虫',或者我只是做错了什么。我试图获取片段内部的片段的引用。我们有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吗?
谢谢!
答案 0 :(得分:5)
您必须动态添加子片段。见here:
注意:在布局时,您无法将布局扩展为片段 包括&lt;片段&gt;。仅在添加时支持嵌套片段 一个动态的片段。
PS。如果你打算使用嵌套片段然后为各种奇怪的行为做好准备,你可以在android平台的bug报告中找到它们:
答案 1 :(得分:0)
如果您想使用嵌套片段并且能够通过findFragmentById获取对它们的引用,则无法使用支持包。
我已将所有getSupportFragmentManager()
更改为getFragmentManager()
,并将所有FragmentActivity
替换为常规Activity
。
现在它按预期工作,只需拨打getChildFragmentManager().findFragmentById()
。