Восстановить предыдущее состояние фрагмента при вращении и положении в стопке

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

  • При вращении (особенно во втором фрагменте) данные, введенные в EditTexts, очищаются
  • Я хочу, чтобы backstack также восстанавливался с текстом, ранее введенным во втором фрагменте.

Проблема в том, что когда я сохраняю данные в пакет с помощью OnSaveInstanceState(...), я снова успешно получаю их из OnViewCreated(...), но когда я использую editText.setText(str), текст не отображается.

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

Как я могу сделать, чтобы он работал правильно?

Спасибо.


person BlueskyFR    schedule 04.05.2018    source источник
comment
Я добавляю тот же вопрос на днях. В основном вам нужно использовать onResume для установки значения EditText. Если вы установите его в onViewCreated, он будет переопределен системой, поскольку он попытается восстановить предыдущее состояние самостоятельно.   -  person Eselfar    schedule 04.05.2018
comment
Я попробую это, я скажу вам, если это работает для меня! Как восстановить бэкстэк?   -  person BlueskyFR    schedule 05.05.2018


Ответы (1)


Сделайте ваши фрагменты сохраняемыми:

setRetainInstance(true);

См. следующее руководство по изменению состояния ориентации изменения ориентации Android `

person Tobias Alt    schedule 04.05.2018
comment
Это не держит backstack! - person BlueskyFR; 05.05.2018
comment
Хорошо, тогда идея заключалась бы в том, чтобы показать и скрыть фрагменты, которые поддерживают жизнь в заднем стеке. - person Tobias Alt; 06.05.2018
comment
Как можно восстановить бэкстек? - person BlueskyFR; 06.05.2018