我正在构建一个相对简单的RecyclerView,使用垂直LinearLayout Manager和DefaultItemAnimator . 它只会处理添加和删除项目(没有动画更改,交换,移动等)

我的项目将添加到列表中的特定位置,因为它按特定顺序排序,因此列表必须滚动到添加项目的位置,以便向用户显示 .

并且有一个棘手的部分 - LinearLayoutManager和DefaultItemAnimator似乎不是为了支持预测动画而构建的 . 目前,由于滚动,所有出现的项目都是动画的,而不仅仅是新添加的项目,我想仅在新项目上运行特定的动画 .

首先,我已经阅读了文档here,其中说:

布局管理器需要更好的项目动画体验,其中项目可以根据项目不在屏幕上的位置在屏幕上和屏幕上进行动画处理,然后LayoutManager应该从supportsPredictiveItemAnimations()返回true并向onLayoutChildren添加其他逻辑(Recycler,State)

这是 RecyclerView.LayoutManager 的文档,所以 LinearLayoutManager 作为一个孩子应该已经有了这个额外的逻辑(或不?)

问题是它的 onLayoutChildren 方法过于复杂,我不确定应该修改哪个部分以便区分"appearing on screen"和"brand new"视图 .

我还阅读了this tutorial,它解决了我的确切问题,但该示例使用的是FixedGridLayoutManager,而且我再次发现它太复杂,无法理解和调整整个布局逻辑 .

我不是在寻找一个现成的复制粘贴解决方案,但我需要一些关于理解布局功能的线索 . 我担心写自己的那个,除了单调乏味之外,一定会产生更糟糕的结果,因为已经有200行代码,由聪明的人写的比我更好^^

理想情况下,我想添加一些东西,或做一些小改动,以免破坏整个测量,报废,回收,以及其中发生的任何其他复杂的事情 .

在此先感谢,欢迎任何帮助