Как управлять Backstack с дочерними фрагментами? - PullRequest
0 голосов
/ 28 августа 2018

У меня проблемы с вложенными / дочерними фрагментами. Мой вариант использования: у меня есть фрагмент A в качестве родительского фрагмента и FragChild1, FragChild2, FragChild3 в качестве дочерних фрагментов, которые будут отображаться внутри Frag A. Теперь при обратном нажатии от FragChild3 он должен работать так:

FragChild3 -> FragChild2 -> FragChild1 -> FragA (ParentFrag).

Код, который я использовал для добавления дочерних фрагментов, -

for ChildFrag1-

Fragment mChildFragment1 = new ChildFragment1();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.replace(R.id.container_view, mChildFragment1);
        transaction.addToBackStack("FragChild1");
        transaction.commit();
        
for ChildFrag2-

Fragment mChildFragment2 = new ChildFragment2();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.replace(R.id.container_view, mChildFragment2);
        transaction.addToBackStack("FragChild2");
        transaction.commit();

Я искал в StackOverflow соответствующие ответы, но пока не нашел ни одного правильного ответа / способа управления обратным стеком для дочерних фрагментов.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Попробуйте,

Fragment fragment= new ChildFragment1();
getChildFragmentManager().beginTransaction().replace(R.id.contentView, fragment).addToBackStack(fragment.getClass().getName()).commitAllowingStateLoss();
0 голосов
/ 28 августа 2018

Ваш код кажется хорошим. Просто переопределите метод onbackpressed в действии, которое содержит родительский фрагмент, и поместите в него данный код.

if (parentfragment.getChildFragmentManager().getBackStackEntryCount() > 1) {
    parentfragment.getChildFragmentManager().popBackStackImmediate();
} else {
    super.onBackPressed();
}
0 голосов
/ 28 августа 2018

Передайте тег в метод замены. TAG может так же просто, как имя фрагмента (String). Измените свой код следующим образом:

transaction.replace(R.id.container_view, mChildFragment1, "FragChild1");
transaction.addToBackStack("FragChild1");
transaction.commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...