更新数据集的方法
import androidx.databinding.ObservableArrayList
object DataBindingDifferUtils {
inline fun <reified T:Any> updateList(oldList: ObservableArrayList<T>, newList:List<T>?) {
if (newList == null) return
val newSize = newList.size
val oldSize = oldList.size
val minSize = Math.min(newSize,oldSize)
val maxSize = Math.max(newSize,oldSize)
for (idx in 0 until minSize) {
oldList[idx] = newList[idx]
}
val offset = newSize - oldSize
if (offset > 0) {
for (idx in minSize until maxSize) {
oldList.add(newList[idx])
}
} else {
for (idx in (maxSize-1) downTo minSize) {
oldList.removeAt(idx)
}
}
}
}
用法
在更新数据集的时候,就不需要先 clear 后 addAll 了, 只需要这么写即可
val oldlist = ObservableArrayList<CustModel>()
resp.data?.map { CustModel(name = it.name) }?.let { newlist->
DataBindingDifferUtils.updateList(oldlist, newlist)
}