2015-06-18 4 views
1

Я пытаюсь реализовать следующий фрагмент: Фрагмент A заменяется фрагментом B, который, в свою очередь, заменяется фрагментом C. Являетесь ли в фрагменте B или C, я хочу, чтобы пользователь назад, чтобы вернуть его в фрагмент A. Я добавляю в backstack при замене A на B. Но когда я перехожу из B в C, я не добавляю в backstack. При навигации по фрагменту B все работает нормально. Но, переходя от C, я получаю A и C на одном экране - C не исчезает. Интересно, связано ли это с моим использованием backstack. Любая помощь приветствуется.нетривиальные андроидные фрагменты backstack

Мой код эквивалентен:

Fragment fragment; 

fragment = new FragmentA(); 
transaction.replace(R.id.container, fragment); 
transaction.commit(); 

fragment = new FragmentB(); 
transaction.replace(R.id.container, fragment); 
transaction.addToBackStack(null); 
transaction.commit(); 

fragment = new FragmentC(); 
transaction.replace(R.id.container, fragment); 
transaction.commit(); 

ответ

0

Это общий способ добавить к Backstack. Использовать теги.

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment1 fragment1 = new Fragment1(); 
fragmentTransaction.replace(R.id.fragment_container, fragment1, Fragment1.class.getName()); 
fragmentTransaction.addToBackStack(Fragment1.class.getName()); 
fragmentTransaction.commit(); 

Теперь аналогично для frament2:

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment2 fragment2 = new Fragment2(); 
fragmentTransaction.replace(R.id.fragment_container, fragment2, Fragment2.class.getName()); 
fragmentTransaction.addToBackStack(Fragment2.class.getName()); 
fragmentTransaction.commit(); 

Сделайте то же самое для fragment3. А теперь удалить FRAGMENT2 из backstack с помощью:

getFragmentManager().popBackStack(
    Fragment2.class.getName(), 
    FragmentManager.POP_BACK_STACK_INCLUSIVE); 

Вы должны быть в состоянии перейти непосредственно от fragment3 обратно FRAGMENT2.

Кроме того, вы используете фрагментTransaction.replace (...), а не фрагментTransaction.add (...). Не могли бы вы разместить соответствующий код?

+0

{{ Мой код эквивалентен: Фрагмент фрагмента; фрагмент = новый FragmentA(); transaction.replace (R.id.container, фрагмент); transaction.commit(); фрагмент = новый FragmentB(); transaction.replace (R.id.container, фрагмент); transaction.addToBackStack (null); transaction.commit(); фрагмент = новый FragmentC(); transaction.replace (R.id.container, фрагмент); transaction.commit(); }}} – yinonby

+0

Проблема с addToBackStack (null) является основной проблемой, попробуйте назначить теги Fragment1.class.getName(), как было предложено, и вывести второй фрагмент с помощью его тега. Затем вы можете перейти от 3-го фрагмента к первому) –

+0

Решили проблему – yinonby

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