73 lines
2.6 KiB
Kotlin
73 lines
2.6 KiB
Kotlin
package com.xscm.moduleutil.diff
|
|
|
|
import android.os.Bundle
|
|
import androidx.recyclerview.widget.DiffUtil
|
|
import com.xscm.moduleutil.bean.CircleListBean
|
|
|
|
|
|
class CircleListDiffCallback(
|
|
private val oldList: List<CircleListBean>?,
|
|
private val newList: List<CircleListBean>?
|
|
) :
|
|
DiffUtil.Callback() {
|
|
override fun getOldListSize(): Int {
|
|
return oldList?.size ?: 0
|
|
}
|
|
|
|
override fun getNewListSize(): Int {
|
|
return newList?.size ?: 0
|
|
}
|
|
|
|
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
|
|
return oldList!![oldItemPosition].id == newList!![newItemPosition].id
|
|
}
|
|
|
|
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
|
|
val oldItem = oldList!![oldItemPosition]
|
|
val newItem = newList!![newItemPosition]
|
|
|
|
// 判断核心数据是否一致(排除动态字段)
|
|
if (!equalsStr(oldItem.nickname, newItem.nickname)) return false
|
|
if (!equalsStr(oldItem.avatar, newItem.avatar)) return false
|
|
if (!equalsStr(oldItem.content, newItem.content)) return false
|
|
if (oldItem.is_like != newItem.is_like) return false
|
|
if (oldItem.sex != newItem.sex) return false
|
|
if (!equalsStr(oldItem.images, newItem.images)) return false
|
|
|
|
// 动态字段不参与整体比较(让 getChangePayload 控制)
|
|
return equalsStr(oldItem.rewards_num, newItem.rewards_num)
|
|
&& equalsStr(oldItem.like_num, newItem.like_num)
|
|
&& equalsStr(oldItem.comment_num, newItem.comment_num)
|
|
// && equalsStr(oldItem.read_num, newItem.read_num)
|
|
}
|
|
|
|
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
|
|
val oldItem = oldList!![oldItemPosition]
|
|
val newItem = newList!![newItemPosition]
|
|
|
|
val diff = Bundle()
|
|
|
|
if (!equalsStr(oldItem.rewards_num, newItem.rewards_num)) {
|
|
diff.putString("rewards_num", newItem.rewards_num)
|
|
}
|
|
if (!equalsStr(oldItem.like_num, newItem.like_num)) {
|
|
diff.putString("like_num", newItem.like_num)
|
|
diff.putInt("is_like",newItem.is_like)
|
|
}
|
|
if (!equalsStr(oldItem.comment_num, newItem.comment_num)) {
|
|
diff.putString("comment_num", newItem.comment_num)
|
|
}
|
|
// if (!equalsStr(oldItem.read_num, newItem.read_num)) {
|
|
// diff.putString("read_num", newItem.read_num)
|
|
// }
|
|
|
|
return if (diff.size() == 0) null else diff
|
|
}
|
|
|
|
private fun equalsStr(a: String?, b: String?): Boolean {
|
|
if (a == null && b == null) return true
|
|
if (a == null || b == null) return false
|
|
return a == b
|
|
}
|
|
}
|