Состояние сохранения 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");
}
}