I have a progress bar (swirly waiting style) defined in xml as:
<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"
/>
I hide it's visibility in the activity's onCreate
method using,
progressBar.setVisibility(View.GONE);
and start it on a button's onClick
event using
progressBar.setVisibility(View.VISIBLE);
Now if I change the screen oreintation the progress bar disappears. I understand that the activity is destroyed and recreated on an orientation change, and the state of the activity is recreated in the new orientation from the saved Bundle
savedInstanceState
. So am I right in thinking that the default Bundle
saved by android does not include any changes made to to a ProgressBar
View object?
If this is the case, is it correct to say that the only way to reinstate the correct visibility of the ProgressBar
after an orientation change is to save a flag (e.g. boolean pbState = false/true
) by overriding the method onSaveInstanceState
and inspecting this flag in onRestoreInstanceState
and setting the visibility accordingly? Or, am I missing something really obvious about saving the state of view objects.
Thanks
UPDATE:
Both the solutions provided below work. I decided to opt for putting android:configChanges="orientation|screenSize"
in the manifest xml file. However, the documentation states that this method should only be used as a last resort. My activity is fairly simple, and so the manifest xml method reduces the amount of code required in the main activity, i.e., no onRestoreInstanceState
method. I presume if you're activity is more complex, you'll probably want to explicitly define any state changes using the latter method.