diff --git a/delegates/gradle.properties b/delegates/gradle.properties index 6bb94ac..3eb1156 100644 --- a/delegates/gradle.properties +++ b/delegates/gradle.properties @@ -1,5 +1,5 @@ POM_ARTIFACT_ID=delegates -VERSION_NAME=1.1.2 +VERSION_NAME=1.1.3 POM_NAME=delegates POM_PACKAGING=jar GROUP=com.revolut.recyclerkit \ No newline at end of file diff --git a/delegates/src/main/java/com/revolut/recyclerkit/delegates/DiffAdapter.kt b/delegates/src/main/java/com/revolut/recyclerkit/delegates/DiffAdapter.kt index fcb94ec..e9f036b 100644 --- a/delegates/src/main/java/com/revolut/recyclerkit/delegates/DiffAdapter.kt +++ b/delegates/src/main/java/com/revolut/recyclerkit/delegates/DiffAdapter.kt @@ -116,6 +116,8 @@ open class DiffAdapter( private set override val items = mutableListOf() + private var lastDispatchDiffCallback: Runnable? = null + override fun attachRecyclerView(recyclerView: RecyclerView) { this.recyclerView = WeakReference(recyclerView) } @@ -133,6 +135,7 @@ open class DiffAdapter( val firstVisiblePosition = recyclerView.layoutManager.findFirstCompletelyVisibleItemPosition(autoScrollToTop) val dispatchDiff: () -> Unit = { + lastDispatchDiffCallback = null items.clear() items.addAll(newList) @@ -143,8 +146,13 @@ open class DiffAdapter( } } + lastDispatchDiffCallback?.let { + recyclerView.removeCallbacks(it) + } if (recyclerView.isComputingLayout) { - recyclerView.post { dispatchDiff() } + val newDispatchDiffCallback = Runnable { dispatchDiff() } + lastDispatchDiffCallback = newDispatchDiffCallback + recyclerView.post(newDispatchDiffCallback) } else { dispatchDiff() }