small improvement in StateFlowBasedRecyclerViewAdapter

This commit is contained in:
InsanusMokrassar 2021-06-17 13:45:19 +06:00
parent e715772dbf
commit 6d999be590
1 changed files with 19 additions and 6 deletions

View File

@ -15,16 +15,29 @@ abstract class StateFlowBasedRecyclerViewAdapter<T>(
init {
dataState.onEach {
val diff = Diff(data, it)
val diffForRemoves = Diff(data, it)
val removedIndexes = diffForRemoves.removed.map { it.index }
val leftRemove = removedIndexes.toMutableList()
data = data.filterIndexed { i, _ ->
if (i in leftRemove) {
leftRemove.remove(i)
true
} else {
false
}
}
withContext(Dispatchers.Main) {
removedIndexes.sortedDescending().forEach {
notifyItemRemoved(it)
}
}
val diffAddsAndReplaces = Diff(data, it)
data = it
withContext(Dispatchers.Main) {
diff.removed.forEach {
notifyItemRemoved(it.index)
}
diff.replaced.forEach { (from, to) ->
diffAddsAndReplaces.replaced.forEach { (from, to) ->
notifyItemMoved(from.index, to.index)
}
diff.added.forEach {
diffAddsAndReplaces.added.forEach {
notifyItemInserted(it.index)
}
}