Поддержание видимости индикатора выполнения с изменением ориентации
У меня есть индикатор выполнения (стиль ожидания swirly), определенный в XML как:
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.Holo.ProgressBar.Large"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/progress"
/>
Я скрываю это видимость в деятельностиonCreate
использование метода,
progressBar.setVisibility(View.GONE);
и запустить его на кнопкеonClick
использование события
progressBar.setVisibility(View.VISIBLE);
Теперь, если я изменю настройку экрана, индикатор выполнения исчезнет. Я понимаю, что действие разрушается и воссоздается при изменении ориентации, а состояние действия воссоздается в новой ориентации из сохраненногоBundle
savedInstanceState
, Так что я прав, думая, что по умолчаниюBundle
Сохранено Android не включает в себя какие-либо изменения, внесенные вProgressBar
Посмотреть объект?
Если это так, то правильно ли говорить, что единственный способ восстановить правильную видимостьProgressBar
после изменения ориентации сохранить флаг (например,boolean pbState = false/true
) переопределив методonSaveInstanceState
и проверять этот флаг вonRestoreInstanceState
и настройки видимости соответственно? Или я упускаю что-то действительно очевидное при сохранении объектов состояния просмотра.
Спасибо
ОБНОВИТЬ:Оба решения, представленные ниже, работают. Я решил сделать ставкуandroid:configChanges="orientation|screenSize"
в XML-файле манифеста. Однако в документации говорится, что этот метод следует использовать только какКрайнее средство, Моя деятельность довольно проста, и поэтому метод manifest xml уменьшает объем кода, требуемого в основной операции, т. Е. НетonRestoreInstanceState
метод. Я предполагаю, что если ваша деятельность более сложна, вы, вероятно, захотите явно определить любые изменения состояния, используя последний метод.