Как вы обрабатываете фрагменты транзакций, когда состояние родительского действия обязательно должно быть сохранено? - PullRequest
8 голосов
/ 03 ноября 2011

Мое приложение имеет несколько фрагментов и действий.В течение жизненного цикла основного родительского действия приложение предоставляет пользователю информацию / опции в других действиях.

Документация для фрагментов имеет следующую оговорку для commit ():

Внимание: вы можете зафиксировать транзакцию с помощью commit () только до того, как действие сохранит свое состояние (когда пользователь покидает действие).Если вы попытаетесь выполнить коммит после этого момента, будет сгенерировано исключение.Это связано с тем, что состояние после фиксации может быть потеряно в случае необходимости восстановления действия.Для ситуаций, в которых можно потерять коммит, используйте commitAllowingStateLoss ().

Проблема в том, что после возвращения к родительскому действию я больше не могу использовать FragmentTransactions, которые являются неотъемлемой частью способа, которым яЯ спроектировал навигацию в приложении.

Одно из решений, о котором я подумал, - это изменить мои действия на фрагменты, однако мое приложение также в конечном итоге будет использовать биллинг в приложении, который, я считаю, всегда будет начинать свою собственную деятельность.Это кажется огромным ограничением - в какой-то момент разработки мне придется отображать отдельное действие.

Возможно, мне не по силам использовать commitAllowingStateLoss (), но я чувствую, что упускаю основную концепциюв разработке приложений для Android планшетов.Есть ли способ начать действия, а затем вернуться к родительскому действию (которое управляет фрагментами), не теряя возможности совершать FragmentTransactions?

1 Ответ

3 голосов
/ 13 мая 2013

Вы можете зафиксировать транзакции фрагмента снова, когда ваша родительская активность возобновляется / запускается, даже если она была ранее приостановлена.Документы только означают, что вы не можете зафиксировать в течение периода времени, когда действие приостановлено (и состояние было сохранено) и до того, как оно будет возобновлено снова.Если вы вернетесь к родительскому действию после посещения другого действия, вы сможете снова использовать транзакции фрагментов после вызова Activity.onStart().

Причина этого ограничения состоит в том, что Android сохраняет состояние фрагментов, связанных сАктивность во время Activity.onSaveInstanceState().Если вы попытаетесь выполнить транзакции фрагмента после этой точки, вы будете подвержены потере состояния, если Android потребуется воссоздать + восстановить эту активность (поскольку информация, которую он использует для воссоздания состояния активности, представляет собой только данные, которые были захвачены в Activity.onSaveInstanceState()).

...