Ich erweiterte android.widget.Spinner. und fügte meiner Implementierung ein int-Feld hinzu. Jetzt möchte ich, dass der Feldwert bei der Orientierungsänderung gespeichert wird. Mein erster Gedanke wurde mit Bundle-Objekt für die:Wie speichere ich den benutzerdefinierten Spinner-Status
override fun onSaveInstanceState(): Parcelable {
val bundle = Bundle()
bundle.putParcelable(SUPER_STATE, super.onSaveInstanceState())
bundle.putInt(PREV_ITEM, this.prevItem) // ... save stuff
return bundle
}
override fun onRestoreInstanceState(state: Parcelable?) {
val newState: Parcelable
if (state is Bundle) {
this.prevItem = state.getInt(PREV_ITEM) // ... load stuff
newState = state.getParcelable<Parcelable>(SUPER_STATE)
super.onRestoreInstanceState(newState)
}
super.onRestoreInstanceState(state)
}
Aber ich erhalte eine Fehlermeldung:
java.lang.ClassCastException: android.os.Bundle cannot be cast to android.widget.Spinner$SavedState
So fand ich Spinner source code und herausgefunden, dass ich innere statische Klasse savedState und es erweitern müssen verwenden um meinen Feldwert zu speichern. Aber das konnte ich nicht. Android Studio schlägt vor, dass es das Symbol "Saved State" nicht auflösen kann.
Also was mache ich, um den Zustand meiner benutzerdefinierten Spinner zu speichern?
Der bessere Weg besteht darin, einen statischen Wert zu verwenden und die ausgewählte Position diesem statischen Wert zuzuordnen und diesen Wert in der OnResume-Methode festzulegen. –