|
@@ -115,19 +115,21 @@ abstract class RecyclerAdapter<ITEM, VB : ViewBinding>(protected val context: Co
|
|
|
kotlin.runCatching {
|
|
kotlin.runCatching {
|
|
|
val oldItems = this.items.toList()
|
|
val oldItems = this.items.toList()
|
|
|
val itemsSize = items?.size ?: 0
|
|
val itemsSize = items?.size ?: 0
|
|
|
|
|
+ val headerCount = getHeaderCount()
|
|
|
|
|
+ val footerCount = getFooterCount()
|
|
|
val callback = object : DiffUtil.Callback() {
|
|
val callback = object : DiffUtil.Callback() {
|
|
|
override fun getOldListSize(): Int {
|
|
override fun getOldListSize(): Int {
|
|
|
return itemCount
|
|
return itemCount
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun getNewListSize(): Int {
|
|
override fun getNewListSize(): Int {
|
|
|
- return (items?.size ?: 0) + getHeaderCount() + getFooterCount()
|
|
|
|
|
|
|
+ return itemsSize + headerCount + footerCount
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
|
|
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
|
|
|
- val oldItem = oldItems.getOrNull(oldItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val oldItem = oldItems.getOrNull(oldItemPosition - headerCount)
|
|
|
?: return true
|
|
?: return true
|
|
|
- val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val newItem = items?.getOrNull(newItemPosition - headerCount)
|
|
|
?: return true
|
|
?: return true
|
|
|
return itemCallback.areItemsTheSame(oldItem, newItem)
|
|
return itemCallback.areItemsTheSame(oldItem, newItem)
|
|
|
}
|
|
}
|
|
@@ -136,17 +138,17 @@ abstract class RecyclerAdapter<ITEM, VB : ViewBinding>(protected val context: Co
|
|
|
oldItemPosition: Int,
|
|
oldItemPosition: Int,
|
|
|
newItemPosition: Int
|
|
newItemPosition: Int
|
|
|
): Boolean {
|
|
): Boolean {
|
|
|
- val oldItem = oldItems.getOrNull(oldItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val oldItem = oldItems.getOrNull(oldItemPosition - headerCount)
|
|
|
?: return true
|
|
?: return true
|
|
|
- val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val newItem = items?.getOrNull(newItemPosition - headerCount)
|
|
|
?: return true
|
|
?: return true
|
|
|
return itemCallback.areContentsTheSame(oldItem, newItem)
|
|
return itemCallback.areContentsTheSame(oldItem, newItem)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
|
|
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
|
|
|
- val oldItem = oldItems.getOrNull(oldItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val oldItem = oldItems.getOrNull(oldItemPosition - headerCount)
|
|
|
?: return null
|
|
?: return null
|
|
|
- val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
|
|
|
|
|
|
|
+ val newItem = items?.getOrNull(newItemPosition - headerCount)
|
|
|
?: return null
|
|
?: return null
|
|
|
return itemCallback.getChangePayload(oldItem, newItem)
|
|
return itemCallback.getChangePayload(oldItem, newItem)
|
|
|
}
|
|
}
|