Ошибки во фрагментах, объявленных в макетах XML (ACL v4) - PullRequest
2 голосов
/ 21 сентября 2011

Разочаровавшись в поведении фрагментов, я начал проводить тестирование.

У меня есть одно упражнение и 2 фрагмента. Фрагмент A объявляется в макете xml действия, а фрагмент B добавляется (только если его нет) в макет действия в методе onCreate() действия. Я добавил логирование всех основных методов жизненного цикла для действия и двух фрагментов и проверил поведение при переключении ориентации назад и вперед. Вот мои выводы:

Фрагмент B (динамически добавленный фрагмент) ведет себя как ожидалось:

a) после изменения ориентации, пакет savedInstanceState содержит то, что было ранее сохранено в onSaveInstanceState()

b) если setRetainInstance(true), то во время изменения ориентации onDestroy() не вызывается и также не вызывается последующий onCreate(). Поля фрагмента сохраняются при смене ориентации

Фрагмент A (фрагмент, определенный в макете xml) не работает должным образом:

a) после изменения ориентации, комплект saveInstanceState всегда равен нулю, хотя onSaveInstanceState() правильно назван

b) если setRetainInstance(true), во время изменения ориентации, onDestroy() не вызывается, как ожидалось, НО, в отличие от ожидаемого, onCreate() также вызывается, когда фрагмент повторно присоединяется. А также, поля фрагмента не сохраняются.

Подводя итог, для фрагментов, объявленных в макетах xml и использующих ACL v4, сохранение состояния во время изменения ориентации не работает, а setRetainInstance (true) не работает.

У меня вопрос: проверял ли кто-нибудь эту функциональность на Android 3.0+ и мог ли он сказать, правильно ли работают фрагменты при использовании фрагментов из Android SDK.

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

1 Ответ

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

Версия 4 ACL исправила эти проблемы.

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