Android:通过查找带有标记而不是ID的容器来添加片段

Android:通过查找带有标记而不是ID的容器来添加片段,android,android-fragments,Android,Android Fragments,我正在使用for循环创建片段的多个实例。在每个片段中,我需要添加另一组子片段。在这样做时,我需要找到正确的容器。如果我使用容器的ID,所有子片段都会添加到第一个父片段,而不是它们自己的父片段 在我的主要片段中: for (....) { ParentFragment parentFragment = new ParentFragment(); parentFragment.setSomeData(data); fragmentTransaction.add(R.id.ma

我正在使用for循环创建片段的多个实例。在每个片段中,我需要添加另一组子片段。在这样做时,我需要找到正确的容器。如果我使用容器的ID,所有子片段都会添加到第一个父片段,而不是它们自己的父片段

在我的主要片段中:

for (....) {
    ParentFragment parentFragment = new ParentFragment();
    parentFragment.setSomeData(data);
    fragmentTransaction.add(R.id.main_fragment_container, parentFragment, data);
}

fragmentTransaction.commit();
现在我有N个父片段

在每个父片段中:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    ChildFragment childFragment = new ChildFragment();
    childFragment.setSomeData(data);
    fragmentTransaction.add(R.id.parent_fragment_container, childFragment).commit();
}
问题是,
ChildFragment
的所有实例都被添加到第一个ParentFragment,因为“R.id.parent\u fragment\u container”是所有ParentFragment的常量。对于ParentFragment的每个实例,它都不会更改

因为ParentFragment的每个实例都有唯一的标记,所以我是否可以使用此标记而不是
R.id.parent\u fragment\u container

XML定义:

fragment\u main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>


fragment\u parent.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>

片段
在另一个
片段
中,应该使用父
片段
片段管理器——通过
getChildFragmentManager()
——而不是
活动
片段管理器来处理


FragmentManager
将仅搜索父
Fragment
视图
以查找给定的容器ID,因此您不会在第一个找到的容器中找到所有子
Fragment
,当
活动
片段管理器
刚刚使用第一个
父片段容器
时,它会在
活动
的整体层次结构中找到。另一个
片段
中的
片段应与该父片段
片段一起处理
FragmentManager
–使用
getChildFragmentManager()
–而不是
活动的
FragmentManager
获得


FragmentManager
将仅搜索父
Fragment
视图
以查找给定的容器ID,因此您不会在第一个找到的容器中找到所有子
Fragment
,当
活动
片段管理器
刚刚使用了第一个
父片段容器
时,它会在
活动
的整体层次结构中找到。

片段
在另一个
片段
中应该由该父片段的子对象处理
FragmentManager
,使用
getChildFragmentManager()
获取。如果这样做的话,你就不会有你当前的问题了。谢谢,就这样!你能留下这个作为回答吗?我将它标记为正确的。
Fragment
在另一个
Fragment
中应该由父
Fragment
s子
FragmentManager
处理,该子
getChildFragmentManager()
获得。如果这样做的话,你就不会有你当前的问题了。谢谢,就这样!你能留下这个作为回答吗?我会把它标记为正确的。