Android: фрагменты, вызывающие проблемы при изменении ориентации

Согласно примеру Google здесь Я разработал приложение на основе фрагментов.

Моя основная активность содержит фрагмент списка заголовков и, если он создан в ландшафтном режиме, фрагмент сведений. Если приложение запускается в портретном режиме, основное действие содержит только фрагмент списка, и если щелкнуть элемент списка, запускается новое действие, которое показывает фрагмент сведений.

Если я остаюсь в портретном или ландшафтном режиме, все работает нормально. Но как только я меняю ориентацию, возникает множество проблем.

1-я проблема: при запуске в портретном режиме, а затем при переходе в ландшафтный режим действие дважды добавляется в стек действий, и мне приходится дважды нажимать кнопку "Назад", чтобы закрыть приложение. Я не могу представить, как Google хочет, чтобы это работало, так как мне этого избежать?

2-я проблема: при переходе из ландшафтного режима в портретный режим отображается список, а не фрагмент сведений с текущим выбранным элементом. Таким образом, весь пользовательский ввод в моем фрагменте сведений теряется. Это просто раздражает, и я не знаю, как с этим справиться. Должен ли я программно заботиться об изменении ориентации в каждом действии?

3-я проблема: когда я переключаюсь между деталями n в ландшафтном режиме, как только я перехожу в портретный режим, мне приходится нажимать кнопку "Назад" n > раз, чтобы закрыть мое добавление, так как фрагменты находятся в заднем стеке (хотя они больше не видны). Должен ли я сам очищать задний стек при изменении ориентации?


person krinklesaurus    schedule 30.09.2012    source источник
comment
Никто не сможет вам помочь, не видя код, который вы использовали.   -  person user    schedule 30.09.2012
comment
Код, который я использовал, можно увидеть в примере Google.   -  person krinklesaurus    schedule 30.09.2012


Ответы (1)


Есть одна вещь о действиях. То есть, когда вы меняете ориентацию, Activity перезапускается, если вы не сделаете следующее:

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

android:configChanges="orientation"

- Во-вторых, реализуйте следующий метод, если вам нужно что-то сделать в случае изменения ориентации. Если нет, то с предыдущим пользователь не потеряет свои данные.

onOrientationChanged (int orientation)
person Javier    schedule 30.09.2012
comment
Это не очень хорошее решение, оно нарушает изменения конфигурации, которые во многих случаях действительно важны. Есть другие лучшие решения. - person afollestad; 18.11.2014
comment
@afollestad: можете ли вы предоставить решение? Я ищу это. Спасибо. - person Huy Do; 12.06.2015
comment
@JamesDo используйте onSaveInstanceState(Bundle) и извлекайте Bundle в onCreate(Bundle). - person afollestad; 12.06.2015
comment
@JamesDo вы также можете хранить сериализуемые объекты в Bundle. - person afollestad; 12.06.2015