Состояние сохранения Android при изменении ориентации

У меня есть приложение для Android, которое поддерживает состояние пройденного расстояния, времени и т.д. Это состояние, которое я могу удобно хранить в объекте и хранить ссылку на этот объект в Bundle, когда Android вызывает onDestroy(), когда пользователь изменяет ориентацию экрана, затем восстанавливает состояние в onCreate (Bundle savedBundle). Тем не менее, у меня также есть определенное состояние в объектах Buttons и EditText на экране, которые я хочу сохранить с помощью ориентации экрана. Например, в onStart (Bundle savedBundle) я вызываю:

_timerButton.setBackgroundColor(Color.GREEN);
_pauseButton.setBackgroundColor(Color.YELLOW);
_pauseButton.setEnabled(false);

Затем во время работы моего приложения цвет/активированный статус этих кнопок будет изменен. Есть ли более удобный способ сохранения состояния элементов пользовательского интерфейса (EditText, Button objects и т.д.) Без необходимости вручную сохранять/восстанавливать каждый атрибут для каждой кнопки? Это действительно неуклюже, чтобы вручную управлять этим типом состояния между ориентациями экрана.

Спасибо за любую помощь.

Ответ 1

Вы пробовали использовать: его работу через

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

в файле манифеста?

Это не работает по умолчанию, потому что при изменении ориентации onCreate будет вызываться снова, и он перерисовывает ваше представление.

Если вы пишете этот параметр, вам не нужно обращаться в Activity, структура позаботится о остальном. При изменении ориентации он сохранит состояние экрана или макета.

ПРИМЕЧАНИЕ Если вы используете другой макет для ландшафтного режима, добавив эти параметры, макет для ландшафтного режима не будет вызываться.

Другой способ и Другой способ

Ответ 2

Чтобы сохранить вашу переменную или значения, вы должны использовать onSaveInstanceState (Bundle); и когда изменения ориентации затем должны восстанавливать значения, следует также использовать onRestoreInstanceState(), но не очень часто. ( onRestoreInstanceState() вызывается после onStart(), тогда как onCreate() вызывается до onStart(). Используйте методы put для хранения значений в onSaveInstanceState()

protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

И восстановите значения в onCreate():

public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getLong("param");
  }
}