В моем приложении я имею следующую архитектуру:Сохранение состояния фрагмента
MainActivity
|_ FirstFragment
| |_ GridFragment
| |_ MapFragment
|
|_ SecondFragment
|
|_ ThirdFragment
Обратите внимание, что:
MainActivity
используетActionBarSherlock
иSlidingMenu
.SlidingMenu
переключатели между фрагментами (FirstFragment
,SecondFragment
,ThirdFragment
).FirstFragment
создает кнопку в панели действий для переключения между сеткой и карта режим. Это значит, чтобы переключаться между его субфрагментами.
То, что я хочу достичь
Мне нужно фрагменты должны сохранять свое состояние при переключении между ними. Это, если я в FirstFragment
, а затем выберите режим карты (показать MapFragment
субфрагмент), а из меню слайдов выберите другой вариант и вернитесь, Я должен снова увидеть карту. Прямо сейчас, это сброс каждого фрагмента при выборе его раздела из меню слайдов.
Это неудивительно, поскольку на данный момент я совершаю транзакции с new FirstFragment()
при нажатии на пункты меню.
Тем не менее, я сначала попытался иметь ссылки на каждый фрагмент в своем родителе. Например, у MainActivity
было три члена фрагментов, которые при совершении транзакций были проверены, если они существуют ранее, и при необходимости создаются. Это работало нормально, пока я не добавил второй уровень фрагментов, затем он начал бросать исключения при совершении транзакции (говоря, что активность была уничтожена).
Как вы, возможно, заметили, я далек от того, чтобы быть экспертом по Android и вам нужно руководствоваться этой темой.
Как сохранить состояния фрагментов без ссылки для каждого из них?
* ... как на данный момент я совершаю транзакции с новым FirstFragment() при нажатии на пункты меню. * - когда пользователь вносит изменения в хранилище 'FirstFragment', которые изменяются в' Activity' выровняйте логическое целое поле (или вы можете сохранить его в статическом булевом флаге в FirstFragment, поскольку у вас есть только два варианта). Когда создается новый экземпляр FirstFragment, он проверяет действие или этот логический флаг и создает правильный вложенный фрагмент на основе значения флага. – Luksprog
Как вы обрабатываете фрагменты второй глубины (сетка и карта)? Вы использовали getChildFragmentManager() для их управления? В моем случае мне удалось выполнить две вкладки (вкладка на вкладке), используя getFragmentManager() для вкладки первой глубины и getChildFragmentManager() для вкладки второй глубины. – kingori
@kingori Да, я использую 'getChildFragmentManager()' внутри 'FirstManager'. –