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();
    }