99 votes

Android HashMap dans un Bundle ?

Le site android.os.Message utilise un Bundle à envoyer avec sa méthode sendMessage. Par conséquent, est-il possible de mettre un HashMap à l'intérieur d'un Bundle ?

1voto

Jocky Doe Points 516

J'utilise mon implémentation kotlin de Parcelable pour y parvenir et jusqu'à présent, cela fonctionne pour moi. C'est utile si vous voulez éviter le lourd serializable.

De plus, pour que cela fonctionne, je recommande de l'utiliser avec ces

Déclaration

class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
    constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeMap(map)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
        @JvmStatic
        override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
            return ParcelableMap(parcel)
        }
        @JvmStatic 
        override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
            return arrayOfNulls(size)
        }
    }

}

Utilisez

écrire

val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)

lire

val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map

N'oubliez pas que si votre carte K,V ne sont pas parcellisés par défaut, ils doivent mettre en œuvre Parcelable

0voto

CoolMind Points 11

En Kotlin :

hashMap = savedInstanceState?.getSerializable(ARG_HASH_MAP) as? HashMap<Int, ValueClass>

putSerializable(ARG_HASH_MAP, hashMap)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X