Utrzymywanie widoczności paska postępu przy zmianie orientacji
Mam pasek postępu (styl oczekujący) zdefiniowany w xml jako:
<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"
/>
Ukrywa to widoczność w działaniuonCreate
metoda przy użyciu,
progressBar.setVisibility(View.GONE);
i uruchom go na przyciskuonClick
wydarzenie za pomocą
progressBar.setVisibility(View.VISIBLE);
Teraz, gdy zmienię rozmiar ekranu, pasek postępu zniknie. Rozumiem, że aktywność jest niszczona i odtwarzana po zmianie orientacji, a stan aktywności jest odtwarzany w nowej orientacji z zapisanejBundle
savedInstanceState
. Mam rację, myśląc, że domyślnieBundle
zapisany przez androida nie zawiera żadnych zmian dokonanych w aProgressBar
Zobacz obiekt?
Jeśli tak jest, czy słuszne jest stwierdzenie, że jedynym sposobem przywrócenia prawidłowej widocznościProgressBar
po zmianie orientacji należy zapisać flagę (np.boolean pbState = false/true
) zastępując metodęonSaveInstanceState
i sprawdzanie tej flagionRestoreInstanceState
i odpowiednio ustawić widoczność? Albo brakuje mi czegoś naprawdę oczywistego w zapisywaniu obiektów widoku stanu.
Dzięki
AKTUALIZACJA:Oba poniższe rozwiązania działają. Zdecydowałem się na wprowadzenieandroid:configChanges="orientation|screenSize"
w pliku manifestu xml. Jednak dokumentacja stwierdza, że ta metoda powinna być używana tylko jakoOstatnia deska ratunku. Moja aktywność jest dość prosta, więc manifestowa metoda xml zmniejsza ilość kodu wymaganego w głównej działalności, tj. NieonRestoreInstanceState
metoda. Zakładam, że jeśli twoja aktywność jest bardziej złożona, prawdopodobnie będziesz chciał wyraźnie zdefiniować wszelkie zmiany stanu przy użyciu tej drugiej metody.