Обработка состояний изменений ориентации - PullRequest
3 голосов
/ 21 октября 2011

Как я могу обработать все состояния, когда происходит событие ориентации?

Что-то вроде:

  • перед запуском (сохранить некоторые состояния экрана)
  • при возникновении (в целях анимации)
  • после того, как это произошло (загрузитьсостояние экрана)

Я знаю, что onConfigurationChanged может обрабатывать изменения ориентации.И я попробовал это:

    public void onConfigurationChanged(Configuration cfg) {
        saveState();

        super.onConfigurationChanged(cfg);

        loadState();
    }

В saveState я сохраняю последний индекс, просматриваемый в Галерее на SharedPreferences.В loadState я получаю lastIndex из SharedPreferences и делаю его текущим в галерее.

Я также пытался поместить loadState в метод onResume, но он не вызывается после изменения ориентации.

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

перед запуском (сохраните некоторые состояния экрана)

Используйте onSaveInstanceState() и / или onRetainNonConfigurationInstance() и / или фрагмент, для которого вы назвали setRetainInstance(true)

когда происходит (в целях анимации)

Это обрабатывается ОС.

после того, как это происходит (загрузка состояния экрана)

Используйте onRestoreInstanceState() и / или getLastNonConfigurationInstance() (если вы пошли по маршруту фрагмента, ваши данные просто остаются там)

Я знаю, что onConfigurationChanged может обрабатывать изменения ориентации.

@ EightEight's answer хорошо описывает это.

3 голосов
/ 21 октября 2011

Вы можете быть немного смущены.

Это из API документов :

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

Если вы указали параметр в AndroidManifest, система уведомит вас об изменении ориентации, вызвав onConfigurationChanged ().Если вы не установили флаг, то Android убьет вашу активность, запустит новую с правильной ориентацией и затем вызовет onResume () .

Если вы хотите получать уведомления о завершении активностиориентация изменилась и все изложено, я бы рекомендовал переопределить метод onDraw () в одном из ваших дочерних представлений.К тому времени все будет сделано, и вы сможете, например, восстановить состояние до изменения ориентации.

HTH.

...