DiffUtil.ItemCallback areItemsTheSame() 方法检查项目两次
DiffUtil.ItemCallback areItemsTheSame() method check items twice
我向 /list.php?page=1 发送请求并使用 Paging 3 组件在 UI 中显示数据。
在第一个请求中,areItemsTheSame(new, old) 方法什么都不做。没有登录 Logcat.
然后我使用 SwipeRefreshLayout 刷新数据并发送相同的请求api (/list.php?page=1).
DiffUtil.ItemCallback areItemsTheSame(new, old) 方法检查项目两次。一次降序,然后升序。
Logcat:
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: check: true
I: newItem: 3304 = oldItem: 3304
I: check: true
I: newItem: 3303 = oldItem: 3303
I: check: true
I: newItem: 3302 = oldItem: 3302
I: check: true
I: newItem: 3301 = oldItem: 3301
I: check: true
I: newItem: 3300 = oldItem: 3300
I: check: true
I: newItem: 3300 = oldItem: 3300
I: check: true
I: newItem: 3301 = oldItem: 3301
I: check: true
I: newItem: 3302 = oldItem: 3302
I: check: true
I: newItem: 3303 = oldItem: 3303
I: check: true
I: newItem: 3304 = oldItem: 3304
I: check: true
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
I: check: true
空缺片段:
适配器:
视图模型:
数据源:
我想我找到了答案。
Myers's algorithm does not handle items that are moved so DiffUtil
runs a second pass on the result to detect items that were moved.
https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil
我向 /list.php?page=1 发送请求并使用 Paging 3 组件在 UI 中显示数据。
在第一个请求中,areItemsTheSame(new, old) 方法什么都不做。没有登录 Logcat.
然后我使用 SwipeRefreshLayout 刷新数据并发送相同的请求api (/list.php?page=1).
DiffUtil.ItemCallback areItemsTheSame(new, old) 方法检查项目两次。一次降序,然后升序。
Logcat:
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: check: true
I: newItem: 3304 = oldItem: 3304 I: check: true
I: newItem: 3303 = oldItem: 3303 I: check: true
I: newItem: 3302 = oldItem: 3302 I: check: true
I: newItem: 3301 = oldItem: 3301 I: check: true
I: newItem: 3300 = oldItem: 3300 I: check: true
I: newItem: 3300 = oldItem: 3300 I: check: true
I: newItem: 3301 = oldItem: 3301 I: check: true
I: newItem: 3302 = oldItem: 3302 I: check: true
I: newItem: 3303 = oldItem: 3303 I: check: true
I: newItem: 3304 = oldItem: 3304 I: check: true
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 I: check: true
空缺片段:
适配器:
视图模型:
数据源:
我想我找到了答案。
Myers's algorithm does not handle items that are moved so DiffUtil runs a second pass on the result to detect items that were moved.
https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil