Состояние сохранения 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 и т. Д.) Без необходимости вручную сохранять / восстанавливать каждый атрибут для каждой кнопки? Это действительно неуклюже, когда нужно вручную управлять этим типом состояния между ориентациями экрана.

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

Solutions Collecting From Web of "Состояние сохранения Android при изменении ориентации"

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

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

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

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

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

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

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

Чтобы сохранить переменную или значения, вы должны использовать 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"); } }