Jak dodać obiekt Enum do pakietu Androida?
android
enums
android-bundle
zer0stimulus
źródło
źródło
Odpowiedzi:
Wyliczenia są serializowane, więc nie ma problemu.
Biorąc pod uwagę następujący wyliczenie:
Pakiet:
Zamiar:
źródło
outState.putSerializable("trollData", game.getFunkyTrolls());
ładowaniegame.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
:?ClassNotFoundException
Wiem, że to stare pytanie, ale napotkałem ten sam problem i chciałbym podzielić się tym, jak to rozwiązałem. Kluczem jest to, co powiedział Miguel: Enumy można nadać szeregowo.
Biorąc pod uwagę następujący wyliczenie:
Położyć:
źródło
Dla kompletności jest to pełny przykład tego, jak umieścić i odzyskać wyliczenie z pakietu.
Biorąc pod uwagę następujący wyliczenie:
Możesz umieścić wyliczenie w pakiecie:
I odzyskaj wyliczenie:
źródło
Używam kotlin.
następnie wprowadź Intent:
kiedy zarabiasz, aby uzyskać wartość:
źródło
.name
jest bardzo ważną ścieżką.name
wputString()
. Z Kotlin jest już usprawniony, jeśli używasz.apply
. Na przykład :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Może być lepiej przekazać go jako ciąg z myEnumValue.name () i przywrócić go z YourEnums.valueOf (s), ponieważ w przeciwnym razie kolejność wyliczenia musi zostać zachowana!
Dłuższe objaśnienie: Konwertuj z enum ordinal na enum
źródło
Inna opcja:
źródło
putSerializable(key, value)
/(Type) getSerializable(key)
lubputString(key, value.name())
/Type.valueOf(getString(key))
, implementacja działki jest tutaj zbędna i bezsensowna.Parcelable
jest dobrym rozwiązaniem do przechowywania tablic wartości Enum.Użyj bundle.putSerializable (klucz string, Serializable s) i bundle.getSerializable (klucz string):
Dokumentacja: http://developer.android.com/reference/android/os/Bundle.html
źródło
W przypadku programu Intent możesz użyć tego sposobu:
Przeznaczenie: kotlin
FirstActivity:
SecondActivity:
źródło
Jedną rzeczą, aby mieć świadomość - jeśli używasz
bundle.putSerializable
dlaBundle
zostać dodane do zawiadomienia, można uruchomić w następującej kwestii:Aby obejść ten problem, możesz wykonać następujące czynności:
Które można następnie wykorzystać w następujący sposób:
źródło
W prosty sposób przypisz wartość całkowitą do wyliczenia
Zobacz następujący przykład:
Strona nadawcy:
Strona odbiornika:
źródło
Myślę, że konwersja enum na int (dla normalnego enum), a następnie ustawienie pakietu było najłatwiejszym sposobem. jak ten kod dla zamiaru:
następnie dla stanu kontroli:
ale nie działa dla wszystkich typów enum!
źródło
Utworzyłem rozszerzenie Koltin:
Utwórz pakiet i dodaj:
i dostać:
źródło