我将myRecyclerViewitemAnimator分配如下(在Kotlin中),以便我可以收听动画的开始和结束事件。

    myRecyclerView.itemAnimator = object : DefaultItemAnimator() {
        override fun onAnimationFinished(viewHolder: RecyclerView.ViewHolder?) {
            Log.d("Testing", "I am finished")
        }
        override fun onAnimationStarted(viewHolder: RecyclerView.ViewHolder?) {
            Log.d("Testing", "I am started")
        }
    }

我使用DiffUtil调度更改。动画效果很好。但是只调用onAnimationFinished回调,而不调用onAnimationStarted。我想念什么吗?

最佳答案

ItemAnimator#onAnimationStartedItemAnimator#onAnimationFinished分别由ItemAnimator#dispatchAnimationStartedItemAnimator#dispatchAnimationFinished调用。

ItemAnimator#dispatchAnimationStarted 的文档中:



查看ItemAnimator的子类SimpleItemAnimator及其子类DefaultItemAnimator的源代码后,我发现在任何子类中的任何地方都未调用ItemAnimator#dispatchAnimationStarted。但是,已从子类中调用ItemAnimator#dispatchAnimationFinished

这就是为什么您没有为onAnimationStarted实现获取任何回调的原因。

但是,我不确定这是故意遗留的还是框架中的错误,我找不到有关此的任何资源。

10-04 23:40