Как поместить задний стек для Activity с несколькими фрагментами?
Предположим, у меня есть активность, которая содержит два FrameLayouts (назовем их FrameA и FrameB), который, в свою очередь каждый содержат фрагмент (назовем их FragmentA1 и FragmentB1 соответственно). Теперь я совершить ряд отдельных фрагментов операций с использованием кода, подобный следующему ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... так, что я заменить FragmentA1 в FrameA с FragmentA2, то я заменю FragmentB1 в FrameB с FragmentB2, то я замените FragmentA2 в FrameA на FragmentA3, затем я заменил FragmentB2 в Frame2 на FragmentB3, а конечное состояние выглядит как изображение выше (где видны только FragmentA3 и FragmentB3).
Если я правильно понял, как работает задний стек, нажатие «назад» будет чередовать фрагменты фрагментов между FrameA и FrameB (отражая, как я их добавил).
Кто-нибудь знает, можно ли выборочно вывести последнюю транзакцию на FrameA или FrameB? (То есть, если я нажал «Pop FrameA», а затем FrameA будет выполнен переход назад от FragmentA3 к FragmentA2 и, вместо этого, если я нажал «Pop FrameB», а затем FrameB будет выполнен переход назад от FragmentB3 к FragmentB2)
Дополнение: Я знаю, что я могу получить последний фрагмент, добавленный к данному FrameLayout, с использованием метода
FragmentManager.findFragmentById(int framelayoutId)
, но вызовFragmentTransaction.remove(fragment).commit()
удаляет только фрагмент из представления и не переводит представление обратно в фрагмент, который он ранее отображал.
Если FragmentTransaction.remove «удаляет только фрагмент из представления и не переведет View», то, что показывается в вид? Но я могу понять, почему это может вызвать путаницу, если Mgr хранит один стек фрагментов, но не знает, какие из них одновременно видны, т. Е. Как он узнает, что A2 «находится под» A3, когда B2 может находиться между ними на стек? – gordonwd
Если в представлении (FrameLayout в моем случае) было добавлено несколько фрагментов, используя метод 'FragmentTransaction.add (int, Fragment)', тогда вызов 'FragmentTransaction.remove (Fragment) .commit()' Я считаю, FrameLayout, показывающий последний добавленный фрагмент. Однако добавление фрагментов в представление с использованием метода 'FragmentTransaction.replace (int, Fragment)' (как я делаю, считая, что это лучше для памяти ?!) оставит без рамки FrameLayout (т. Е. Отображается как пустой вид) ... –
Чтобы добавить к моему предыдущему комментарию: я вижу, что есть некоторые полезные методы, такие как 'FragmentManager.getBackStackEntryAt (int index)', 'FragmentManager.popBackStack (String name, int flags) ',' popBackStack (int id, int flags) ',' FragmentTransaction.addToBackStack (String name) 'и' FragmentTransaction.replace (int containerViewId, фрагмент фрагмента, тег String) ', просто не уверен как объединить их вместе для достижения того, что мне нужно ... –