Mantendo a visibilidade da barra de progresso com a mudança de orientação
Eu tenho uma barra de progresso (swirly waiting style) definida em 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"
/>
Eu escondo sua visibilidade na atividadeonCreate
método usando,
progressBar.setVisibility(View.GONE);
e iniciá-lo em um botãoonClick
evento usando
progressBar.setVisibility(View.VISIBLE);
Agora, se eu mudar a orientação da tela, a barra de progresso desaparece. Eu entendo que a atividade é destruída e recriada em uma mudança de orientação, e o estado da atividade é recriado na nova orientação a partir do salvamento.Bundle
savedInstanceState
. Então estou certo em pensar que o padrãoBundle
salvo por android não inclui quaisquer alterações feitas para umProgressBar
Visualizar objeto?
Se este for o caso, é correto dizer que a única maneira de restabelecer a visibilidade correta doProgressBar
depois de uma mudança de orientação é para salvar um sinalizador (por exemplo,boolean pbState = false/true
) substituindo o métodoonSaveInstanceState
e inspecionando esta bandeira emonRestoreInstanceState
e definindo a visibilidade em conformidade? Ou, estou faltando algo realmente óbvio sobre como salvar os objetos do estado de visão.
obrigado
ATUALIZAR:Ambas as soluções fornecidas abaixo funcionam. Eu decidi optar por colocarandroid:configChanges="orientation|screenSize"
no arquivo xml do manifesto. No entanto, a documentação afirma que este método só deve ser usado como umúltimo recurso. Minha atividade é bastante simples e, portanto, o método xml do manifesto reduz a quantidade de código necessária na atividade principal, ou seja, nãoonRestoreInstanceState
método. Presumo que, se a sua atividade é mais complexa, você provavelmente desejará definir explicitamente as alterações de estado usando o último método.