diff --git a/core/src/main/java/io/plaidapp/core/ui/recyclerview/SlideInItemAnimator.kt b/core/src/main/java/io/plaidapp/core/ui/recyclerview/SlideInItemAnimator.kt index f64fdf07a..d9ff2b51b 100644 --- a/core/src/main/java/io/plaidapp/core/ui/recyclerview/SlideInItemAnimator.kt +++ b/core/src/main/java/io/plaidapp/core/ui/recyclerview/SlideInItemAnimator.kt @@ -25,6 +25,7 @@ import androidx.dynamicanimation.animation.SpringAnimation.TRANSLATION_Y import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.RecyclerView import io.plaidapp.core.util.listenForAllSpringsEnd +import io.plaidapp.core.util.onEach import io.plaidapp.core.util.spring /** @@ -108,10 +109,10 @@ open class SlideInItemAnimator @JvmOverloads constructor( } override fun endAnimations() { - pendingAdds.forEach(::endPendingAdd) - runningAdds.forEach(::endRunningAdd) - pendingMoves.forEach(::endPendingMove) - runningMoves.forEach(::endRunningMove) + pendingAdds.onEach(::endPendingAdd) + runningAdds.onEach(::endRunningAdd) + pendingMoves.onEach(::endPendingMove) + runningMoves.onEach(::endRunningMove) super.endAnimations() } diff --git a/core/src/main/java/io/plaidapp/core/util/Extensions.kt b/core/src/main/java/io/plaidapp/core/util/Extensions.kt index b67a32d54..62f86ead0 100644 --- a/core/src/main/java/io/plaidapp/core/util/Extensions.kt +++ b/core/src/main/java/io/plaidapp/core/util/Extensions.kt @@ -34,3 +34,12 @@ package io.plaidapp.core.util */ val T.exhaustive: T get() = this + +/** + * A for each loop where traversal is backed by an [MutableIterator] allowing for removal + * during iteration. + */ +inline fun MutableIterable.onEach(action: (T) -> Unit) { + val iterator = iterator() + while (iterator.hasNext()) action(iterator.next()) +}