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