Bagaimana Anda menambahkan objek Enum ke Bundel Android?
android
enums
android-bundle
zer0stimulus
sumber
sumber
Jawaban:
Enum Serializable sehingga tidak ada masalah.
Diberikan enum berikut:
Bundel:
Maksud:
sumber
outState.putSerializable("trollData", game.getFunkyTrolls());
memuat:game.setFunkyTrolls((Game.FunkyTroll[]) savedInstanceState.getSerializable("trollData"));
?ClassNotFoundException
Saya tahu ini adalah pertanyaan lama, tetapi saya datang dengan masalah yang sama dan saya ingin berbagi bagaimana saya menyelesaikannya. Kuncinya adalah apa yang dikatakan Miguel: Enum dapat Serializable.
Diberikan enum berikut:
Taruh:
sumber
Demi kelengkapan, ini adalah contoh lengkap tentang cara memasukkan dan mendapatkan kembali enum dari bundel.
Diberikan enum berikut:
Anda bisa memasukkan enum ke dalam bundel:
Dan dapatkan kembali enum:
sumber
Saya menggunakan kotlin.
kemudian dimasukkan ke dalam Intent:
ketika Anda bersih untuk mendapatkan nilai:
sumber
.name
adalah jalan yang sangat penting.name
inputString()
. Dengan Kotlin itu sudah efisien jika menggunakan.apply
. Sebagai contoh :ContentFragment.newInstance(Bundle().apply { putString(FEED_TYPE_KEY, SAVED.name) })
bundle.putEnum(key, enum) | bundle.getEnum<>(key)
Mungkin lebih baik untuk meneruskannya sebagai string dari myEnumValue.name () dan mengembalikannya dari YourEnums.valueOf (s), karena jika tidak, pemesanan enum harus dilestarikan!
Penjelasan yang lebih panjang: Konversi dari tipe enum ordinal ke enum
sumber
Pilihan lain:
sumber
putSerializable(key, value)
/(Type) getSerializable(key)
atauputString(key, value.name())
/Type.valueOf(getString(key))
, implementasi Parcelable di sini berlebihan dan tidak masuk akal.Parcelable
adalah solusi yang baik untuk menyimpan Arays of Enum-values.Gunakan bundle.putSerializable (kunci String, Serializable s) dan bundle.getSerializable (kunci String):
Dokumentasi: http://developer.android.com/reference/android/os/Bundle.html
sumber
Untuk Intent Anda dapat menggunakan cara ini:
Maksud: kotlin
FirstActivity:
SecondActivity:
sumber
Satu hal yang harus diperhatikan - jika Anda menggunakan
bundle.putSerializable
untukBundle
yang akan ditambahkan ke pemberitahuan, Anda bisa lari ke masalah berikut:Untuk menyiasatinya, Anda dapat melakukan hal berikut:
Yang kemudian bisa digunakan seperti ini:
sumber
Cara sederhana, tetapkan nilai integer ke enum
Lihat contoh berikut:
Sisi Pengirim:
Sisi Penerima:
sumber
Saya pikir mengkonversi enum ke int (untuk enum normal) dan kemudian mengatur bundel adalah cara termudah. suka kode ini untuk maksud:
maka untuk kondisi cek:
tetapi tidak bekerja untuk semua tipe enum!
sumber
Saya telah membuat ekstensi Koltin:
Buat bundel dan tambahkan:
dan dapatkan:
sumber