Изменение ориентации, потеря всех элементов моего списка - PullRequest
14 голосов
/ 25 мая 2010

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

Почему?

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

Ответы [ 3 ]

27 голосов
/ 25 мая 2010

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

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

android:configChanges="keyboardHidden|orientation"

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

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

6 голосов
/ 25 ноября 2014

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

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

у меня работает

6 голосов
/ 25 мая 2010

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

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

...