Подробнее
Люди уже предоставили код.Так что я собираюсь добавить более подробную информацию об этом.
Что происходит при повороте экрана?
Когда экран поворачивается, изменяется конфигурация действия, поэтому система ищет более подходящий ресурс для действия.Для этого система уничтожает экземпляр действия и воссоздает новый экземпляр действия.
Как система создает новый экземпляр?
Система пытается воссоздать экземпляр, используя набор сохраненных данных старого экземпляра Activity, известного как состояние экземпляра .InstanceState - это коллекция Key-Value Pair, хранящаяся в Bundle
объекте.
Система автоматически сохраняла некоторые данные
По умолчанию система сохраняет объекты View, например, в Bundle.
- Текст в EditText
- Положение прокруткив ListView и т. д.
Если вы хотите сохранить больше данных, которые должны выдержать изменение ориентации.Вы должны переопределить onSaveInstanceState(Bundle savedInstanceState)
метод.
Используйте onSaveInstaneState правильно
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Так что по ошибке, если вы забудете вызвать super.onSaveInstanceState (saveInstanceState), поведение по умолчанию не будет работать, т.е. текст в EditText
не сохранит,Если вы мне не верите проверьте это
Какой метод использовать для восстановления состояния?
Многие люди путаются, включая меня.Должен ли я выбрать
onCreate(Bundle savedInstanceState)
ИЛИ
onRestoreInstanceState(Bundle savedInstanceState)
Этоне имеет значения .Оба метода получают один и тот же пакет в параметре.Единственное отличие состоит в том, что вам нужно предоставить нулевую проверку методом onCreate(Bundle savedInstanceState)
.Но если вы собираетесь использовать onRestoreInstanceState(Bundle savedInstanceState)
, , используйте его осторожно
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
Всегда вызывайте super.onRestoreInstanceState(savedInstanceState)
, чтобы система восстановила иерархию просмотра по умолчанию