Junior — Middle
DiffUtil ичиндеги кайсы механизм тизмедеги элементтин гана өзгөргөн бөлүктөрүн жаңыртууга жардам берет?
sobes.tech AI
AIден жооп
DiffUtil ичиндеги, элементтин гана өзгөргөн бөлүктөрүн жаңыртуу үчүн getChangePayload() ыкмасы колдонулат. Бул механизм объекттин кайсы талаалары өзгөргөнүн так аныктоого жана бул маалыматтарды адаптерге өткөрүп, Viewдин тиешелүү бөлүктөрүн гана жаңыртууга мүмкүндүк берет, бүт элементти эмес.
Колдонуу мисалы:
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
}
}
Адаптерде, onBindViewHolder ыкмасында, бул payload иштетилип, гана өзгөргөн талаалар жаңыртылса, бул иштөө ылдамдыгын жана интерфейсдин агымдуулугун жакшыртат.