Сохранение пользовательского интерфейса при изменении ориентации - onSaveInstanceState не работает должным образом при сохранении фрагмента - PullRequest
18 голосов
/ 20 октября 2011

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

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

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

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

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

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

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

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

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

1 Ответ

17 голосов
/ 13 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...