老师我又来了

来源:4-6 主界面底部导航栏封装-1

慕用1394343

2019-03-30

这次问题是关于DiffUiDataCallback 这个类

    // 两个类是否就是同一个东西,比如Id相等的User
    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
        Log.e("TAB","测试位置旧:" + oldItemPosition);
        Log.e("TAB","测试位置新:" + newItemPosition);
        T beanOld = mOldList.get(oldItemPosition);
        T beanNew = mNewList.get(newItemPosition);
        Log.e("TAB","id对比为:" + beanNew.isSame(beanOld));
        return beanNew.isSame(beanOld);
    }
}

假如我第一次刷新,旧数据0,新数据4个 ,当我第二次刷新时(数据没有更改), 我发现areItemsTheSame这个方法执行了8次 位置信息从0到3 ,然后又从3到0, 咋会来回执行两遍
图片描述

写回答

1回答

Qiujuer

2019-03-31

这个东西,说实话,内部是使用的:Myers 算法来进行的;简单来说:

  1. 先进行数量对比:得出增加、删除

  2. 同长度对比,相互俩俩对比,得出相互的位移

给你找了一篇文章:https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/

内部的算法来说就比较复杂了,我如果在这里来说无异于是班门弄斧了;哈哈。可以看看相关文章哈。

0
1
慕用1394343
非常感谢!
2019-04-01
共1条回复

手把手开发完整的即时通讯App 客户端+服务端+MVP架构

客户端+服务端+MVP架构+封装思想+主流框架

1755 学习 · 874 问题

查看课程