¿Cómo se agrega un objeto Enum a un paquete de Android?
android
enums
android-bundle
zer0stimulus
fuente
fuente
Respuestas:
Las enumeraciones son serializables, por lo que no hay problema.
Dada la siguiente enumeración:
Haz:
Intención:
fuente
outState.putSerializable("trollData", game.getFunkyTrolls());
cargargame.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
:?ClassNotFoundException
Sé que esta es una vieja pregunta, pero encontré el mismo problema y me gustaría compartir cómo lo resolví. La clave es lo que dijo Miguel: las enumeraciones son serializables.
Dada la siguiente enumeración:
Poner:
fuente
Para completar, este es un ejemplo completo de cómo poner y recuperar una enumeración de un paquete.
Dada la siguiente enumeración:
Puedes poner la enumeración en un paquete:
Y recuperar la enumeración:
fuente
Yo uso kotlin.
luego poner en Intento:
cuando netas para obtener valor:
fuente
.name
es un camino muy importante.name
inputString()
. Con Kotlin ya está optimizado si se usa.apply
. Por ejemplo :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Puede ser mejor pasarlo como una cadena desde myEnumValue.name () y restaurarlo desde YourEnums.valueOf (s), ya que de lo contrario se debe preservar el orden de la enumeración.
Explicación más larga: Convertir de enum ordinal a enum type
fuente
Otra opción:
fuente
putSerializable(key, value)
/(Type) getSerializable(key)
oputString(key, value.name())
/Type.valueOf(getString(key))
, la implementación parcelable aquí es redundante y sin sentido.Parcelable
es una buena solución para almacenar matrices de valores Enum.Utilice bundle.putSerializable (String key, Serializable s) y bundle.getSerializable (String key):
Documentación: http://developer.android.com/reference/android/os/Bundle.html
fuente
Para Intención puedes usar esta manera:
Intención: kotlin.
PrimeroActividad:
Segunda actividad:
fuente
Una cosa a tener en cuenta: si está utilizando
bundle.putSerializable
paraBundle
que se agregue a una notificación, podría encontrarse con el siguiente problema:Para evitar esto, puede hacer lo siguiente:
Que luego se puede usar así:
fuente
De una manera simple, asigne un valor entero a enum
Vea el siguiente ejemplo:
Lado del remitente:
Lado del receptor:
fuente
Creo que convertir enum a int (para enum normal) y luego configurar en paquete fue la forma más fácil. como este código para la intención:
entonces para verificar el estado:
¡Pero no funciona para todo tipo de enumeración!
fuente
He creado una extensión de Koltin:
Crea un paquete y agrega:
y obten:
fuente