Junior — Middle
DiffUtil içindeki hangi mekanizma, listedeki öğenin sadece değişen kısımlarını güncellemeye yardımcı olur?
sobes.tech yapay zeka
AI'dan gelen yanıt
DiffUtil içinde, yalnızca değişen öğelerin bölümlerini güncellemek için getChangePayload() yöntemi kullanılır. Bu mekanizma, nesnenin hangi alanlarının değiştiğini belirlemeye olanak tanır ve bu verileri adaptöre ileterek yalnızca ilgili View bölümlerini günceller, tüm öğeyi değil.
Kullanım örneği:
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
}
}
Bu payload, onBindViewHolder metodunda işlenebilir ve yalnızca değişen alanlar güncellenerek performans ve kullanıcı arayüzü akıcılığı artırılabilir.