FragmentManager добавляет несколько экземпляров одного и того же типа фрагмента

У меня есть необходимость «складывать» фрагменты один поверх другого. Я делаю это:

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" /> 

Все это работает хорошо, пока фрагменты имеют разный тип.

Однако, если я создаю второй экземпляр типа фрагмента, который уже существует, есть исключение:

 java.lang.IllegalStateException: Fragment already added: TestFragment{1184e8a1 #0 id=0x7f0800ef com.test.ui.TestFragment} 

Как добавить несколько экземпляров одного и того же фрагмента?

Одно из требований заключается в том, что все они находятся друг на друге, потому что у немногих из них есть небольшой запас, который позволяет увидеть небольшую часть фрагмента внизу.

Спасибо за помощь!

Попробуйте создать новый экземпляр вашего фрагмента, а не заменять его одним и тем же объектом снова и снова.

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