Załóżmy, że chcesz wyprowadzić własną klasę widoku z istniejącej implementacji widoku, dodając nieco wartości, a więc zachowując kilka zmiennych, które reprezentują twój stan widoku w znaczący sposób.Zastępowanie View.onSaveInstanceState() i View.onRestoreInstanceState() przy użyciu View.BaseSavedState?
Byłoby miło, gdyby Twój widok zapisywał swój stan automatycznie, tak jak robią to inne osoby (jeśli przypisano identyfikator), więc chcesz zastąpić onRestoreInstanceState()
i onSaveInstanceState()
.
Oczywiście musisz wywołać odpowiednie metody swojej klasy bazowej i musisz połączyć informacje o stanie z klasą podstawową.
Oczywiście jedynym bezpiecznym sposobem na to jest zapakowanie superklasy "Parcelable
we własne Parcelable
, tak aby klucze się nie pomieszały.
Teraz nie View.BaseSavedState
i jego ciekawy getSuperState()
metoda, ale ja jakoś nie rozumiem, jak to naprawdę dodaje wartość po prostu przechowywania klasę bazową Parcelable
w Bundle
wraz z wartości stanu widoku potomnej i powrót tego. Z drugiej strony, być może jakiś inny komponent systemowy będzie oczekiwał, że wszystkie informacje o InstanceState będą typu View.AbsSavedState
(np. Takie, że można wywołać getSuperState()
)?
Jakiekolwiek doświadczenia, którymi chcesz się podzielić?
Dziękujemy! Nigdy nie patrzyłem na przykładowy kod w tym przypadku. Dzięki temu wszystko stało się dla mnie bardziej zrozumiałe. –
writeToParcel nigdy nie wydaje się być wywoływana przez onSaveInstanceState. Jaki jest cel? – dylan7
@ dylan7 - To jest wywoływane przez framework podczas serializacji stanu. –