2016-05-11 1 views
1

Имея A-> B-> c в заднем стеке, A находится сверху. В то время он хотел бы, чтобы C был сверху, и держите A, B в порядке в стеке. В требовании он не может иметь два экземпляра C в стеке. Проблема в том, что если поп C, то все A, B удаляются.может быть изменен порядок фрагментов в задней части стола

Он хочет иметь C-> A-> B сейчас.

Возможно ли достичь этого с помощью api FragmentManager?

+0

Существует причина, что называется стек, я не думаю, что есть API, но в зависимости от вашего случая использования, всегда есть подход чтобы заставить его работать! – varunkr

+0

Я думаю, на это уже ответили https://stackoverflow.com/questions/21665346/android-reorder-fragment-backstack –

+0

Возможно создание нового стека с нужным порядком или, возможно, использование отражения для изменения фактического? – Nanoc

ответ

1

FragmentManager не всегда поддерживает изменение порядка обратного хода или удаление элементов, которые не находятся в верхней части стека.

Возможно, вы захотите рассмотреть возможность управления собственной версией фрагмента фрагмента.

+0

yeap, хотите иметь встроенную поддержку от Android. – lannyf

0

сохранить фрагмент скрыть, и если вы хотите показать его.

0

положить ниже код внутри activiy

FragmentManager fragmentManager 


//add fragment A 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.add(resId, fragmentA); 
ft.addToBackstack("tag"); 
ft.commit(); 

//add fragmentB 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.replace(resId, fragmentB); 
ft.addToBackstack("tag1"); 
ft.commit(); 

//add fragmentC 
fragmentManager = getFragmentManager(); 
FragmentTransaction ft = fragmentManager .beginTransaction(); 
ft.replace(resId, fragmentC); 
ft.addToBackstack("tag2"); 
ft.commit(); 

//then try to take back click of B and C fragment here through interface 

//backclick of C 
public void backClick() 
{ 
fragmentManager.popBackStack("tag1",0); 
} 

//back click of B 
public void backClick1() 
{ 
fragmentManager.popBackStack("tag",0); 
} 
+0

поп BackStack уничтожит фрагмент. Спасибо за акцию! – lannyf

Смежные вопросы