RecyclerView - DefaultItemAnimator没有动画添加

时间:2017-11-04 13:16:32

标签: android animation android-recyclerview

我尝试使用DefaultItemAnimator为在RecyclerView末尾添加项目添加动画。添加新项目时,我通知适配器,如果是最后一项,我向下滚动使其显示。

_adapter.notifyItemInserted(position);
if (position==end) _recyclerView.smoothScrollToPosition(end);
到目前为止,我还没有成功地让动画工作,但调查让我意识到它为什么不能正常工作。实际上,animateAdd(holder)按预期调用,添加动画即将在DefaultItemAnimator中启动。

然后谁出现了?调用RecyclerView.removeAndRecycleScrapInt(Recycler)。好的,这是正常的,因为视图会被重新用于添加的项目。但问题是在这个方法中取消了相应持有者的itemAnimator动画。

我错过了什么或者这是一个(已知的)错误?重要的是,如果最后没有插入添加的项目,它可以正常工作。

有一个令人烦恼的解决方法:通过放入notifyItemInserted延迟new Handler().post(Runnable)来电,但不确定这是一个好主意......这样做意味着指望事实上,当调用removeAndRecycleScrapInt时,项目已被添加,但不是动画。如果我使用延迟超过几毫秒的postDelay(delay),它就无法正常工作。所以它可能只适用于某些设备。

1 个答案:

答案 0 :(得分:1)

抱歉,我只是意识到自己错过了什么......使用平滑滚动会延迟调用RecyclerView.removeAndRecycleScrapInt,从而取消已启动的动画。因此,关键是使用普通滚动:

_adapter.notifyItemInserted(position);
if (position==end) _recyclerView.scrollToPosition(end);