Comment ajouter un objet Enum à un bundle Android?
android
enums
android-bundle
zer0stimulus
la source
la source
Réponses:
Les énumérations sont sérialisables, il n'y a donc aucun problème.
Étant donné l'énumération suivante:
Paquet:
Intention:
la source
outState.putSerializable("trollData", game.getFunkyTrolls());
chargementgame.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
:?ClassNotFoundException
Je sais que c'est une vieille question, mais je suis venu avec le même problème et je voudrais partager comment je l'ai résolu. La clé est ce que Miguel a dit: les énumérations sont sérialisables.
Étant donné l'énumération suivante:
Mettre:
la source
Par souci d'exhaustivité, ceci est un exemple complet de la façon de mettre en place et de récupérer une énumération à partir d'un bundle.
Étant donné l'énumération suivante:
Vous pouvez mettre l'énumération dans un bundle:
Et récupérez l'énumération:
la source
J'utilise du kotlin.
puis mettre en intention:
lorsque vous net pour obtenir de la valeur:
la source
.name
est un chemin très important.name
inputString()
. Avec Kotlin, c'est déjà simplifié si vous l'utilisez.apply
. Par exemple :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Il peut être préférable de le passer en tant que chaîne à partir de myEnumValue.name () et de le restaurer à partir de YourEnums.valueOf (s), sinon la commande de l'énumération doit être préservée!
Explication plus longue: conversion de l'énumération ordinale en type énumération
la source
Une autre option:
la source
putSerializable(key, value)
/(Type) getSerializable(key)
ouputString(key, value.name())
/Type.valueOf(getString(key))
, la mise en œuvre de Parcelable est ici redondante et absurde.Parcelable
est une bonne solution pour stocker des tableaux de valeurs Enum.Utilisez bundle.putSerializable (clé de chaîne, Serializable s) et bundle.getSerializable (clé de chaîne):
Documentation: http://developer.android.com/reference/android/os/Bundle.html
la source
Pour l' intention, vous pouvez utiliser cette méthode:
Intention: kotlin
FirstActivity:
SecondActivity:
la source
Une chose à savoir - si vous utilisez
bundle.putSerializable
pourBundle
ajouter un à une notification, vous pouvez rencontrer le problème suivant:Pour contourner ce problème, vous pouvez procéder comme suit:
Qui peut ensuite être utilisé comme ceci:
la source
Une manière simple, attribuer une valeur entière à enum
Voir l'exemple suivant:
Côté expéditeur:
Côté récepteur:
la source
Je pense que convertir l'énumération en int (pour l'énumération normale), puis définir le bundle a été la manière la plus simple. comme ce code d'intention:
puis pour vérifier l'état:
mais ne fonctionne pas pour tous les types d'énumération!
la source
J'ai créé une extension Koltin:
Créez un bundle et ajoutez:
et obtenir:
la source