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

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

Почему?

Как справиться?

14
задан Janusz 27 January 2012 в 08:41
поделиться

2 ответа

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

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

android:configChanges="keyboardHidden|orientation"

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

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

27
ответ дан 1 December 2019 в 07:06
поделиться

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

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

6
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: