Конфигурация Android изменена - PullRequest
1 голос
/ 05 декабря 2011

Мне интересно узнать, какие методы переопределяются при повороте устройства Android (т. Е. При изменении конфигурации)?

onSaveInstanceState(...), onConfigurationChanged(...), onRestoreInstanceState(...) - что-то похожее на это?

Мне также будет интересно послушать весь процесс, связанный с изменением конфигурации. Спасибо.

Ответы [ 4 ]

5 голосов
/ 05 декабря 2011

Согласно справочнику разработчика Android, вы должны использовать:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

Для получения дополнительной информации см .: http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

Вас может заинтересовать просмотр: http://developer.android.com/guide/topics/manifest/activity-element.html#config

Здесь вы можете найти всех слушателей конфигурации, которые вы можете прослушать.

Не забудьте поместить их в манифест андроида:

<activity 
   android:configChanges=["orientation"]
   . . .
</activity>

Надеюсь, это поможет ...

4 голосов
/ 05 декабря 2011

Когда вы поворачиваете устройство, ваша активность будет воссоздана, и все переменные будут переинициализированы.Таким образом, в этом случае, если вы хотите, чтобы некоторые значения оставались неизменными при вращении, вы также можете сохранить их состояние, используя onSaveInstanceState(), и вы можете восстановить в onCreate() снова, проверив, что Bundle не равен нулю.

if(savedInstanceState != null){
            // get the restore value from the Bundle
        }

Где при вызове устройства будет вызываться onConfigurationChanged() ( Обратите внимание, что он будет вызываться только в том случае, если вы выбрали конфигурации, которые вы хотели бы обработать с атрибутом configChanges в манифесте ).Из параметра вы получите новую конфигурацию устройства.

Если вы не хотите, чтобы ваша активность воссоздалась при ротации устройства, вам нужно добавить эту строку в тег активности в AndroidManifestфайл.

android:ConfigChanges="keyboardHidden|orientation"
2 голосов
/ 05 декабря 2011

От разработчиков Android ...

Чтобы сохранить объект во время изменения конфигурации во время выполнения:

  1. Переопределите метод onRetainNonConfigurationInstance(), чтобы вернуть объект, который вы хотели бы сохранить.
  2. Когда ваша активность снова создается, вызовите getLastNonConfigurationInstance() для восстановления вашего объекта.

Android вызывает onRetainNonConfigurationInstance () между onStop () и onDestroy (), когда он закрываетсявниз из-за изменения конфигурации.В вашей реализации onRetainNonConfigurationInstance () вы можете вернуть любой объект, который вам нужен для эффективного восстановления вашего состояния после изменения конфигурации.

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

Для получения дополнительной информации см. Здесь Сохранение объектаВо время изменения конфигурации вы также можете найти пример по их ..

Спасибо ..

1 голос
/ 24 мая 2017

Перейти к манифесту и добавить : андроида: configChanges = "ориентация | Размер экрана"

 <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"
                    android:configChanges="orientation|screenSize"
                    />

В основном занятии : скопируйте и вставьте этот код:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);


    }

Все готово -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...