В то время как я протестировал свое приложение на устройстве на базе Android, поворачивающем мой телефон на базе Android от среды до портрета, результаты во всех элементах списка в моем представлении списка исчезают.
Почему?
Как справиться?
Вы теряете элементы списка, потому что поведение по умолчанию для android при смене ориентации - уничтожить вашу активность и создать ее заново. Такое поведение выбрано для того, чтобы android мог воссоздать активность с новым макетом, который может быть использован специально для новой ориентации.
Чтобы предотвратить исчезновение элементов списка, необходимо сделать несколько вещей. Первое, что помогает при смене ориентации, - это просто повторное использование той же активности после смены. Это можно сделать, добавив эту строку
android:configChanges="keyboardHidden|orientation"
к тегу активности в манифесте, с которым у вас возникла проблема. Более подробно это объясняется в этом вопросе.
Поведение, которое вы объяснили, вероятно, также появится, если пользователь открывает активность, а затем отправляет ваше приложение в фоновый режим, делает много других вещей, занимающих память, чтобы удалить ваше приложение из памяти, а затем снова заходит в ваше приложение. В этом случае вам необходимо переписать метод onSaveInstanceState в вашей активности. Как это сделать, объясняется в этом вопросе.
Самый простой способ - использовать onSaveInstanceState
, как объясняется в ответе Януша.
Однако, если в вашем списке много элементов, сохранение их в Bundle
в onSaveInstanceState
может замедлить процесс восстановления Activity
, что пользователи испытал бы как отставание. Чтобы сохранить относительно большие данные, используйте onRetainNonConfigurationInstance , затем перезагрузите данные в onCreate
с помощью getLastNonConfugurationInstance
.