Como você adiciona um objeto Enum a um pacote Android?
android
enums
android-bundle
zer0stimulus
fonte
fonte
Respostas:
As enums são serializáveis, portanto não há problema.
Dado o seguinte enum:
Agrupar:
Intenção:
fonte
outState.putSerializable("trollData", game.getFunkyTrolls());
loadinggame.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
:?ClassNotFoundException
Sei que essa é uma pergunta antiga, mas vim com o mesmo problema e gostaria de compartilhar como resolvi. A chave é o que Miguel disse: Enums são serializáveis.
Dado o seguinte enum:
Colocar:
fonte
Por uma questão de integridade, este é um exemplo completo de como inserir e recuperar uma enumeração de um pacote.
Dado o seguinte enum:
Você pode colocar a enum em um pacote:
E recupere o enum:
fonte
Eu uso o kotlin.
depois coloque em Intent:
quando você ganha para obter valor:
fonte
.name
é um caminho muito importante.name
inputString()
. Com o Kotlin, ele já é otimizado se estiver usando.apply
. Por exemplo :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Pode ser melhor passá-lo como string de myEnumValue.name () e restaurá-lo de YourEnums.valueOf (s), caso contrário, a ordem do enum deve ser preservada!
Explicação mais longa: Converter do tipo enum ordinal para enum
fonte
Outra opção:
fonte
putSerializable(key, value)
/(Type) getSerializable(key)
ouputString(key, value.name())
/Type.valueOf(getString(key))
, a implementação do Parcelable aqui é redundante e sem sentido.Parcelable
é uma boa solução para armazenar matrizes de valores Enum.Use bundle.putSerializable (chave String, s Serializable s) e bundle.getSerializable (chave String):
Documentação: http://developer.android.com/reference/android/os/Bundle.html
fonte
Para Intenção você pode usar desta maneira:
Intenção: kotlin
Primeira atividade:
Segunda atividade:
fonte
Uma coisa a ter em atenção - se você estiver usando
bundle.putSerializable
um aBundle
para ser adicionado a uma notificação, poderá encontrar o seguinte problema:Para contornar isso, você pode fazer o seguinte:
Que pode ser usado assim:
fonte
Uma maneira simples, atribua valor inteiro a enum
Veja o seguinte exemplo:
Lado do Remetente:
Lado do receptor:
fonte
Eu acho que converter enum para int (para enum normal) e, em seguida, definir o pacote foi a maneira mais fácil. como este código para intenção:
depois, para verificar o estado:
mas não funciona para todos os tipos de enumeração!
fonte
Eu criei uma extensão Koltin:
Crie um pacote e adicione:
e pegue:
fonte