Предотвратить обновление активности при изменении ориентации фрагмента Android
Я разрабатываю приложение для Android, где я заменяю фрагменты по кликам. У меня есть отдельные проекты для ландшафтного и портретного режимов. Но проблема в том, что когда я меняю ориентацию, активность обновляется, а кнопка остается не нажатой, я пытался дать
android:configChanges="orientation|keyboardHidden"
Но бесполезно, поскольку для настройки размера экрана не использовались другие макеты, пожалуйста, предложите, как преодолеть это, не обновляя действие по изменению ориентации, но по-прежнему принимая другой макет.
3 ответа
Выше уровня API 12 нам нужно добавить screenSize также, чтобы предотвратить обновление вместе с ориентацией.
android:configChanges="orientation|keyboardHidden|screenSize"
Использование onSaveInstanceState
сохранить состояние кнопки или любое другое состояние и восстановить его в onCreate
используя предоставленный Bundle
,
Если вы используете кнопку, которая является CompoundButton
(лайк CheckBox
), его состояние будет сохранено автоматически для вас.
Как сказал Горски , onSaveInstanceState и onViewStateRestored (для фрагментов) - это способ сохранить состояние фрагмента или активности.
onSaveInstanceState : вызывается, когда фрагмент приостановлен или остановлен
onViewStateRestored : вызывается, когда фрагмент возвращается
Бывший:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putParcelableArrayList(Keys.CURRENT_OPERATIONS.name(), operations);
firstCall = true;
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
if (firstCall)
operations = savedInstanceState.getParcelableArrayList(Keys.CURRENT_OPERATIONS.name());
super.onViewStateRestored(savedInstanceState);
}