Mantener la visibilidad de la barra de progreso con el cambio de orientación
Tengo una barra de progreso (estilo de espera swirly) definida en xml como:
<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"
/>
Oculto su visibilidad en la actividad.onCreate
método utilizando
progressBar.setVisibility(View.GONE);
y empezar en un botónonClick
evento usando
progressBar.setVisibility(View.VISIBLE);
Ahora si cambio la pantalla o desaparece, la barra de progreso desaparece. Entiendo que la actividad se destruye y se recrea en un cambio de orientación, y el estado de la actividad se recrea en la nueva orientación desde el guardadoBundle
savedInstanceState
. Así que estoy en lo cierto al pensar que el defectoBundle
Salvado por Android no incluye ningún cambio realizado en unProgressBar
Ver objeto?
Si este es el caso, ¿es correcto decir que la única manera de restablecer la visibilidad correcta de laProgressBar
después de un cambio de orientación es para guardar una bandera (por ejemplo,boolean pbState = false/true
) anulando el métodoonSaveInstanceState
e inspeccionando esta bandera enonRestoreInstanceState
y establecer la visibilidad en consecuencia? O, me estoy perdiendo algo realmente obvio acerca de guardar los objetos del estado de vista.
Gracias
ACTUALIZAR:Ambas soluciones proporcionadas a continuación funcionan. Decidí optar por ponerandroid:configChanges="orientation|screenSize"
en el archivo manifiesto xml. Sin embargo, la documentación establece que este método solo debe utilizarse comoúltimo recurso. Mi actividad es bastante simple, por lo que el método xml de manifiesto reduce la cantidad de código requerido en la actividad principal, es decir, noonRestoreInstanceState
método. Supongo que si su actividad es más compleja, probablemente querrá definir explícitamente cualquier cambio de estado usando este último método.