我有一个包含 25 个具有稳定 ID 的项目的列表。当用户到达底部时,RecyclerView
我将获取接下来的 25 个项目并显示整个列表(50、75 等)。
DiffUtil.Callback
areItemsTheSame
正在使用值调用int oldItemPosition == int newItemPosition
,我正在检查 id 并且它们是相同的,每次调用都返回 true(25 次调用)。所以下一个电话将是一系列的areContentsTheSame
,我也期待着int oldItemPosition == int newItemPosition
,但newItemPosition
总是+13 ...
两种方法的第一次调用如下所示(来自 own Log
)
areItemsTheSame will return true, positions: 0 0
areItemsTheSame will return true, positions: 1 1
...
areContentsTheSame will return false, positions 0 13
areContentsTheSame will return false, positions 1 14
...
在这些电话之后,我正在记录更改ListUpdateCallback
:
onInserted pos: 25 count: 12
onChanged pos: 0 count: 25
onInserted pos: 0 count: 13
在重绘RecyclerView
孩子之后,我看到每个项目都显示了完全不同的项目,并带有更改类型的动画(事实上,我被移到了项目 34+ 的底部,一次可见项目:4)
问题很简单:为什么?!