老师我又来了
来源: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回答
-
这个东西,说实话,内部是使用的:Myers 算法来进行的;简单来说:
先进行数量对比:得出增加、删除
同长度对比,相互俩俩对比,得出相互的位移
给你找了一篇文章:https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/
内部的算法来说就比较复杂了,我如果在这里来说无异于是班门弄斧了;哈哈。可以看看相关文章哈。
012019-04-01
相似问题
老师阿里云的服务器
回答 2
关于老师的genius库的问题
回答 1