Junior — Middle
Quel mécanisme dans DiffUtil aide à mettre à jour uniquement les parties modifiées d'un élément dans la liste?
sobes.tech IA
Réponse de l'IA
Dans DiffUtil, pour mettre à jour uniquement les parties modifiées d’un élément, la méthode getChangePayload() est utilisée. Ce mécanisme permet de déterminer précisément quels champs de l’objet ont changé, et de transmettre ces données à l’adaptateur pour mettre à jour uniquement les parties correspondantes de la vue, plutôt que l’élément entier.
Exemple d’utilisation :
class MyDiffCallback : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition].id == newList[newItemPosition].id
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition] == newList[newItemPosition]
}
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
val oldItem = oldList[oldItemPosition]
val newItem = newList[newItemPosition]
val diffBundle = Bundle()
if (oldItem.title != newItem.title) {
diffBundle.putString("KEY_TITLE", newItem.title)
}
if (oldItem.description != newItem.description) {
diffBundle.putString("KEY_DESCRIPTION", newItem.description)
}
return if (diffBundle.size() == 0) null else diffBundle
}
}
Dans l’adaptateur, dans la méthode onBindViewHolder, vous pouvez traiter cette charge utile et mettre à jour uniquement les champs modifiés, ce qui améliore la performance et la fluidité de l’interface.