Junior — Middle
Welke mechanisme binnen DiffUtil helpt alleen de gewijzigde delen van een element in de lijst bij te werken?
sobes.tech AI
Antwoord van AI
Binnen DiffUtil, om alleen de gewijzigde delen van een element bij te werken, wordt de methode getChangePayload() gebruikt. Dit mechanisme maakt het mogelijk om precies te bepalen welke velden van het object zijn gewijzigd en deze gegevens door te geven aan de adapter om alleen de relevante delen van de View bij te werken, in plaats van het hele element.
Voorbeeld van gebruik:
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
}
}
In de adapter, in de methode onBindViewHolder, kan deze payload worden verwerkt en alleen de gewijzigde velden worden bijgewerkt, wat de prestaties en de vloeiendheid van de interface verbetert.