0

我向/list.php?page=1发送请求并使用 Paging 3 组件在 UI 中显示数据。

在第一个请求中,areItemsTheSame(new, old)方法什么也不做。没有登录Logcat。

然后我用 SwipeRefreshLayout 刷新数据并请求发送相同的 api (/list.php?page=1)。

DiffUtil.ItemCallback areItemsTheSame(new, old)方法检查项目两次。一次是降序,然后是升序。

日志猫:

I: newItem: 3308 = oldItem: 3308 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3305 = oldItem: 3305 I:检查:正确
I:新项目:3304 = oldItem:3304 I:检查:正确
I:新项目:3303 = oldItem:3303 I:检查:正确
I:新项目:3302 = oldItem:3302 I:检查:正确
I: newItem:3301 = oldItem:3301 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3301 = oldItem:3301 I :检查:真
I:新项目:3302 = oldItem:3302 I:检查:真
I:新项目:3303 = oldItem:3303 I:检查:真
I:新项目:3304 = oldItem:3304 I:检查:真
I: newItem: 3305 = oldItem: 3305 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3308 = oldItem: 3308我:检查:真

空缺片段: 在此处输入图像描述

适配器: 在此处输入图像描述

视图模型: 在此处输入图像描述

数据源: 在此处输入图像描述

4

1 回答 1

1

我想我找到了答案。

Myers 的算法不处理移动的项目,因此 DiffUtil 对结果运行第二次传递以检测移动的项目。

https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil

于 2020-10-29T18:10:26.453 回答