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

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

Почему?

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

Ответы

Ответ 1

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

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

android:configChanges="keyboardHidden|orientation"

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

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

Ответ 2

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

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

Ответ 3

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

android: configChanges = "orientation | screenSize"

он работает для меня