Android: сохранение состояния приложения при изменении ориентации экрана - PullRequest
3 голосов
/ 11 ноября 2011

Я видел следующие ссылки до публикации этого вопроса

http://www.devx.com/wireless/Article/40792/1954

Сохранение состояния активности Android с помощью Save Instance State

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Как сохранить состояние при изменении ориентации в Android, если состояние составлено из моих классов?

Я не понимаю, как мне переопределить следующую функцию:

@Override
    public Object onRetainNonConfigurationInstance() {
        return someExpensiveObject;
    }

В моем приложении у меня есть макет с видимым одним editext, а другой editext становится видимым, когда данные первого editext проверяются на true. Я установил видимость всех остальных editextes и textview на false и сделаю их видимыми после проверки.

Так что в моей деятельности, если ориентация экрана меняется, все элементы с android:visibility="false" становятся невидимыми.

Я также узнал, что когда меняется ориентация экрана нашей деятельности, он вызывает onStop (), затем onDestroy (), а затем снова запускает новую операцию, вызывая onCreate ()

Это причина .. Но я не понимаю, как ее решить ..

Здесь Вы можете увидеть скриншоты моего приложения:

enter image description here на этом изображении все поля загружены и на другом изображении, когда ориентация экрана изменяется на альбомную, все они исчезли

enter image description here

Любая ссылка на учебник или фрагмент кода будет весьма заметна.

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

Спасибо

Ответы [ 2 ]

7 голосов
/ 11 ноября 2011

Ну, если у вас одинаковые layout для обоих экранов, тогда нет необходимости делать это, просто добавьте нижнюю строку в ваш manifest в Activity узле

android:configChanges="keyboardHidden|orientation"

для Android 3.2 (Уровень API 13) и новее:

android:configChanges="keyboardHidden|orientation|screenSize"

, поскольку «размер экрана» также изменяется, когда устройство переключается между книжной и альбомной ориентацией.Документация здесь: http://developer.android.com/guide/topics/manifest/activity-element.html

1 голос
/ 23 июля 2012

Существует еще одна возможность, с помощью которой вы можете сохранить состояние, как оно есть даже при изменении ориентации, с помощью onConfigurationChanged (Configuration newConfig).

Вызывается системой при изменении конфигурации устройства во время работы. Обратите внимание, что это будет вызвано, только если вы выбрали конфигурации, которые вы хотели бы обработать с помощью атрибута configChanges в вашем манифесте. Если происходит какое-либо изменение конфигурации, которое не было выбрано для отчета по этому атрибуту, то вместо сообщения об этом система остановит и перезапустит действие (чтобы запустить его с новой конфигурацией).

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

...