Удалите фрагмент, который не помещается в стек в моем случае - PullRequest
3 голосов
/ 14 марта 2012

Предположим, у меня есть два фрагмента: firstFragment и secondFragment

Я знаю, что могу заменить фрагмент на:

fragmentTransaction.replace(R.id.fragment_placeholder, firstFragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();

Как показывает приведенный выше код, я не сделалдобавьте вышеуказанный firstFragment к заднему стеку .

Затем я заменю на secondFragment, но на этот раз я добавлю secondFragment к обратному стеку :

fragmentTransaction.replace(R.id.fragment_placeholder, secondFragment);
fragmentTransaction.addToBackStack(null); //add to back stack
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();

На моем мобильном экране теперь отображается secondFragment.

У меня вопрос, как я могу удалить firstFragment, который не добавлен в задний стек ?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

После отделения фрагмента фрагмент будет уничтожен.Чтобы убедиться, что фрагмент находится в макете, вы можете использовать перспективу «Просмотр иерархии».Чтобы использовать просмотрщик иерархии, вы должны использовать эмулятор или рутованное устройство.(http://developer.android.com/guide/topics/fundamentals/fragments.html#Creating)

Однако если вы используете android-support-v4.jar для поддержки 1.6 и выше, убедитесь, что вы не определяете какие-либо фрагменты в xml-макете. Фрагменты в xml-макете не могут бытьудаляется при использовании android-support-v4.jar. Просто сделайте это, если вы используете фрагменты, которые будут отображаться постоянно (например, навигация)

Редактировать: Replace также удалит первый фрагмент. Replace заменитвсе дочерние элементы внутри контейнера с данным фрагментом.

1 голос
/ 14 марта 2012

вы можете отсоединить первый фрагмент от пользовательского интерфейса. см. документ для получения дополнительной справки

или вы можете попробовать удалить

РЕДАКТИРОВАТЬ: стоя у документа:

Если вы не вызываете addToBackStack () при выполнении транзакции, которая удаляет фрагмент, то этот фрагмент уничтожается, когда транзакция фиксируется, и пользователь не может перейти к ней.

Так что, я думаю, вам нужно вызвать remove.

...