Wie fügt man einem Android-Bundle ein Enum-Objekt hinzu?
android
enums
android-bundle
zer0stimulus
quelle
quelle
Antworten:
Aufzählungen sind serialisierbar, daher gibt es kein Problem.
Angesichts der folgenden Aufzählung:
Bündeln:
Absicht:
quelle
outState.putSerializable("trollData", game.getFunkyTrolls());
Laden :game.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
?ClassNotFoundException
Ich weiß, dass dies eine alte Frage ist, aber ich hatte das gleiche Problem und möchte mitteilen, wie ich es gelöst habe. Der Schlüssel ist, was Miguel sagte: Aufzählungen sind serialisierbar.
Angesichts der folgenden Aufzählung:
Stellen:
quelle
Der Vollständigkeit halber ist dies ein vollständiges Beispiel dafür, wie Sie eine Enumeration aus einem Bundle einfügen und zurückerhalten.
Angesichts der folgenden Aufzählung:
Sie können die Aufzählung in ein Bündel packen:
Und hol die Aufzählung zurück:
quelle
Ich benutze Kotlin.
dann in Absicht setzen:
wenn Sie netto, um Wert zu erhalten:
quelle
.name
ist sehr wichtiger Weg.name
In zu vermeiden scheintputString()
. Mit Kotlin ist es bereits optimiert, wenn es verwendet wird.apply
. Zum Beispiel :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Es ist möglicherweise besser, es als Zeichenfolge aus myEnumValue.name () zu übergeben und aus YourEnums.valueOf (s) wiederherzustellen, da sonst die Reihenfolge der Aufzählung beibehalten werden muss!
Längere Erklärung: Konvertieren Sie von der Ordnungszahl in den Aufzählungstyp
quelle
Andere Option:
quelle
putSerializable(key, value)
/(Type) getSerializable(key)
oderputString(key, value.name())
/ verwendenType.valueOf(getString(key))
. Die Implementierung von Parcelable ist hier redundant und unsinnig.Parcelable
ist eine gute Lösung zum Speichern von Arrays mit Enum-Werten.Verwenden Sie bundle.putSerializable (String key, Serializable s) und bundle.getSerializable (String key):
Dokumentation: http://developer.android.com/reference/android/os/Bundle.html
quelle
Für Intent können Sie Folgendes verwenden:
Absicht: Kotlin
FirstActivity:
SecondActivity:
quelle
Eine Sache bewusst zu sein - wenn Sie verwenden
bundle.putSerializable
für eineBundle
auf eine Meldung hinzugefügt werden, können Sie in das folgende Problem führen:Um dies zu umgehen, können Sie Folgendes tun:
Welches kann dann so verwendet werden:
quelle
Weisen Sie enum auf einfache Weise einen ganzzahligen Wert zu
Siehe folgendes Beispiel:
Absenderseite:
Empfängerseite:
quelle
Ich denke, Enum in int umzuwandeln (für normale Enum) und dann auf Bundle zu setzen war der einfachste Weg. wie dieser Code für die Absicht:
dann für Prüfzustand:
aber nicht für alle Aufzählungstypen funktionieren!
quelle
Ich habe eine Koltin-Erweiterung erstellt:
Erstellen Sie ein Bundle und fügen Sie hinzu:
und bekomme:
quelle