Skip to content

Commit

Permalink
Support custom areItemsTheSame and areContentsTheSame functions in Mu…
Browse files Browse the repository at this point in the history
…tableObjectAdapter
  • Loading branch information
nielsvanvelzen committed Oct 22, 2023
1 parent 4bb27df commit 8edc261
Showing 1 changed file with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,20 @@ open class MutableObjectAdapter<T : Any> : ObjectAdapter, Iterable<T> {
notifyItemRangeChanged(index, 1)
}

fun replaceAll(items: List<T>) {
fun replaceAll(
items: List<T>,
areItemsTheSame: (old: T, new: T) -> Boolean = { old, new -> old == new },
areContentsTheSame: (old: T, new: T) -> Boolean = { old, new -> old == new },
) {
val diff = DiffUtil.calculateDiff(object : DiffUtil.Callback() {
override fun getOldListSize(): Int = data.size
override fun getNewListSize(): Int = items.size

override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean = areContentsTheSame(oldItemPosition, newItemPosition)
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean = data[oldItemPosition] == items[newItemPosition]
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
areItemsTheSame(data[oldItemPosition], items[newItemPosition])

override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
areContentsTheSame(data[oldItemPosition], items[newItemPosition])
})

data.clear()
Expand Down

0 comments on commit 8edc261

Please sign in to comment.