Android:通过查找带有标记而不是ID的容器来添加片段
我正在使用for循环创建片段的多个实例。在每个片段中,我需要添加另一组子片段。在这样做时,我需要找到正确的容器。如果我使用容器的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 (....) {
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()
获得。如果这样做的话,你就不会有你当前的问题了。谢谢,就这样!你能留下这个作为回答吗?我会把它标记为正确的。