Android FragmentManager添加相同片段类型的多个实例
我需要把碎片一个一个地“叠”起来。我通过以下方式做到这一点:Android FragmentManager添加相同片段类型的多个实例,android,android-fragments,fragment,android-fragmentactivity,Android,Android Fragments,Fragment,Android Fragmentactivity,我需要把碎片一个一个地“叠”起来。我通过以下方式做到这一点: String className = fragment.getClass().getName(); FragmentManager fragmentManager = getChildFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTran
String className = fragment.getClass().getName();
FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_content, fragment, className);
fragmentTransaction.addToBackStack(className);
fragmentTransaction.commit();
在:
<FrameLayout
android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
如何添加同一片段的多个实例
一个要求是它们都在彼此的顶部,因为很少有一个小的边距可以让你看到下面片段的一小部分
谢谢你的帮助 尝试创建片段的新实例,而不是一次又一次地用相同的对象替换它
fragment = new YourFragment();
fragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_content, fragment, className)
.addToBackStack(className);
.commit();
此外,我建议在片段之间更改标记,例如,您可以向其添加一个数字。父片段的布局
<FrameLayout
android:id="@+id/fragment_contentrow"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在父片段中编写代码以添加子片段
FragmentManager fm = getChildFragmentManager();
for (int x = 1; x < 5; x = x + 1) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_contentrow, new MyChildFragment(), "Tag " + x);
ft.addToBackStack(null);
ft.commit();
}
FragmentManager fm=getChildFragmentManager();
对于(int x=1;x<5;x=x+1){
FragmentTransaction ft=fm.beginTransaction();
ft.add(R.id.fragment_contentrow,new MyChildFragment(),“Tag”+x);
ft.addToBackStack(空);
ft.commit();
}
是的,每次都会有一个新的片段实例。您是否也更改了标记?不会工作,因为这会打破底部的要求(“…彼此的顶部…”)。您是否使用getChildFragmentManager()将片段添加到另一个片段中;在代码中?是的,它们被添加到一个主片段中,该片段在启动时被初始化并显示,但这不应该使一个不同的权利?1)为每个添加的片段使用不同的标记。2) 确保将它们添加到框架布局
(将它们堆叠在一起)而不是线性布局
(将它们放在一起)。
FragmentManager fm = getChildFragmentManager();
for (int x = 1; x < 5; x = x + 1) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_contentrow, new MyChildFragment(), "Tag " + x);
ft.addToBackStack(null);
ft.commit();
}