Изменение ориентации, потеря всех элементов моего списка

Пока я тестировал свое приложение на устройстве Android, переводя свой телефон Android с альбомной ориентации на портретную, в результате все элементы списка в моем представлении списка исчезли.

Почему?

Как управлять?


person soclose    schedule 25.05.2010    source источник
comment
Вы знаете, что при изменении ориентации метод onCreate() вызывается снова? Я предполагаю, что именно поэтому элементы вашего списка не добавляются непосредственно при запуске действия.   -  person RoflcoptrException    schedule 25.05.2010


Ответы (3)


Вы теряете элементы списка, потому что поведение по умолчанию для Android во время изменения ориентации состоит в том, чтобы уничтожить вашу активность и воссоздать ее. Это поведение выбрано, чтобы позволить Android воссоздать действие с новым макетом, который может использоваться специально для новой ориентации.

Чтобы предотвратить исчезновение элементов списка, необходимо сделать несколько вещей. Первое, что помогает при изменении ориентации, — просто повторно использовать ту же активность после изменения. Это можно сделать, добавив эту строку

android:configChanges="keyboardHidden|orientation"

к тегу активности в манифесте, с которым у вас возникла проблема. Более подробно это объясняется в этом вопросе.

Объясненное вами поведение, вероятно, также появится, если пользователь откроет действие, а затем отправит ваше приложение в фоновый режим, выполнит много других действий, требующих большого объема памяти, чтобы ваше приложение было удалено из памяти, а затем повторно посещает ваше приложение. Если это так, вы должны перезаписать метод onSaveInstanceState в своей деятельности. Как это сделать, объясняется в этом вопросе.

person Janusz    schedule 25.05.2010
comment
В более поздних версиях API Android это должно выглядеть примерно так: android:configChanges="keyboardHidden|orientation|screenSize" - person Jonathan Perry; 27.12.2014

Самый простой способ - использовать onSaveInstanceState, как объясняется в ответе Януша.

Однако, если в вашем списке много элементов, сохранение их в Bundle в onSaveInstanceState может замедлить процесс воссоздания Activity, что пользователи воспримут как отставание. Чтобы сохранить относительно большие данные, используйте onRetainNonConfigurationInstance, а затем перезагрузите данные в onCreate с getLastNonConfugurationInstance.

person molnarm    schedule 25.05.2010

Попробуйте добавить это в свою деятельность:

android:configChanges="ориентация|размер экрана"

меня устраивает

person user39832    schedule 25.11.2014