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
?
Réponses
Trop de publicités?
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
CoolMind
Points
11
- Réponses précédentes
- Plus de réponses