Подтвердить что ты не робот

Сохранение пользовательского интерфейса при изменении ориентации - onSaveInstanceState не работает, как ожидалось, если сохранить фрагмент

Использование compat lib v1 (не используя v2 | 3 из-за определенных ошибок); вариант этот вопрос.

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

Родительская активность уничтожается при изменении ориентации (ПОЖАЛУЙСТА, не говорите мне о манифестных изменениях, чтобы избежать активного отдыха!!!!).

Фрагмент вызывает setRetainInstance(true).

1) Теперь я понимаю, что представления с уникальными идентификаторами должны сохранять некоторое состояние, скажем, изменение ориентации. Учитывая это, я бы ожидал, что ненулевой пучок в onCreateView|onActivityCreated, но он будет равен нулю.

2) В любом случае, если я сохраняю состояние в onSaveInstanceState (гарантируя, что я вызываю super), я все равно получаю нулевой пакет в 'onCreateView | onActivityCreated`

3) Если я не вызываю setRetainInstance(true), тогда я получаю ненулевой пучок в onCreateView|onActivityCreated, даже если у меня нет метода `onSaveInstanceState '.

Вопросы, которые у меня есть, это работает как ожидалось, и мое понимание жизненного цикла нарушено? Несмотря на это, я предполагаю, что лучшим способом для меня было бы сохранить фрагмент, а затем сохранить состояние элементов управления внутри фрагмента.

Спасибо заранее. Питер.

4b9b3361

Ответ 1

Если вы используете setRetainInstance(true), то, конечно, пакет равен null. Фрагмент не разрушается, а только отрывается от текущей деятельности и привязывается к новому действию. Только когда фрагмент будет уничтожен, вы получите пакет со значениями, сохраненными в onSaveInstanceState. Просто удалите setRetainInstance(true) и используйте сохраненные значения в onCreateView() для настройки ваших пользовательских представлений.