2016-04-06 2 views
0

У меня есть 3 фрагмента, добавленных в сцену в одном и том же контейнере. Два фрагмента добавлен с addToBackStack способом:Удаление фрагмента из того же контейнера

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container, fragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 

И заключительный один добавляется без задней стеки:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container, fragment); 
    fragmentTransaction.commit(); 

Все три уживается прекрасно, потому что, как я понимаю, если фрагмент добавляется с помощью backstack, то он не уничтожается при добавлении другого фрагмента. Последний добавлен без задней части, что означает, что, как только я позвоню replace, его следует уничтожить.

Однако этого не происходит, и когда я называю

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container, myNewFragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 

я все еще могу видеть, что есть 4 фрагмента общей сложности в моем R.id.container, который не то, что я ожидал.

Как я могу удалить свой третий фрагмент, когда я вызываю метод replace при добавлении 4-го фрагмента?

ответ

0

Позвонив addToBackStack(), сделка замены сохраняется в обратно стек, так что пользователь может отменить транзакцию и вернуть предыдущий фрагмент, нажав на кнопку Назад.

Так что в вашем случае вы заменяете третий фрагмент четвертым фрагментом. Это означает, что для реверсирования транзакции им нужен также фрагмент3. Поэтому они не уничтожат его.

+0

Почему 'replace' фактически не заменяет фрагмент? Например, как только я добавлю свой первый фрагмент, почему второй вызов 'replace' не удаляет его из списка? –

+0

Фактически он удаляется из представления, но он будет внутри диспетчера фрагментов. Чтобы мы могли использовать один и тот же экземпляр. – Krish

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