Как добавить объект Enum в комплект Android?
android
enums
android-bundle
zer0stimulus
источник
источник
Ответы:
Перечисления являются сериализуемыми, поэтому проблем не возникает.
Учитывая следующее перечисление:
Bundle:
Намерение:
источник
outState.putSerializable("trollData", game.getFunkyTrolls());
loadinggame.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
:?ClassNotFoundException
Я знаю, что это старый вопрос, но у меня возникла та же проблема, и я хотел бы поделиться тем, как я ее решил. Ключ к тому, что сказал Мигель: Enums являются Serializable.
Учитывая следующее перечисление:
Ставить:
источник
Для полноты картины это полный пример того, как вставить и получить перечисление из пакета.
Учитывая следующее перечисление:
Вы можете поместить enum в пакет:
И вернуть перечисление:
источник
Я использую котлин.
затем введите в намерение:
когда вы чистые, чтобы получить значение:
источник
.name
очень важный путь.name
inputString()
. С Kotlin это уже упрощено при использовании.apply
. Например :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Может быть, лучше передать его как строку из myEnumValue.name () и восстановить его из YourEnums.valueOf (s), так как в противном случае порядок перечисления должен быть сохранен!
Более длинное объяснение: Преобразовать из порядкового номера перечисления в тип перечисления
источник
Другой вариант:
источник
putSerializable(key, value)
/(Type) getSerializable(key)
илиputString(key, value.name())
/Type.valueOf(getString(key))
, реализация Parcelable здесь избыточна и бессмысленна.Parcelable
- хорошее решение для хранения массивов значений Enum.Используйте bundle.putSerializable (строковый ключ, Serializable s) и bundle.getSerializable (строковый ключ):
Документация: http://developer.android.com/reference/android/os/Bundle.html
источник
Для намерения вы можете использовать этот способ:
Намерение: kotlin
FirstActivity:
SecondActivity:
источник
Следует помнить одну вещь - если вы используете
bundle.putSerializable
дляBundle
добавления в уведомление, вы можете столкнуться со следующей проблемой:Чтобы обойти это, вы можете сделать следующее:
Который затем можно использовать так:
источник
Простой способ, присвоить целочисленное значение для enum
Смотрите следующий пример:
Сторона отправителя:
Сторона получателя:
источник
Я думаю, преобразовать enum в int (для обычного enum) и затем установить на bundle было проще всего. как этот код для намерения:
тогда для проверки состояния:
но не работает для всех типов enum!
источник
Я создал расширение Koltin:
Создайте пакет и добавьте:
и получить:
источник