一、优缺点对比
1、rView继承的RecyclerView.Adapter ; ListView的Adapter继承的是BaseAdapter
2、rView支持多种显示样式 LinearLayoutManager GridLayoutManager StraggeredGridLayoutManager
3、rView有默认的方法onCreateViewHolder -> 创建ViewHolder onBindViewHolder ->装填数据
4、rView支持局部刷新
自定义DiffCallback继承自DiffUtil.Callback,复写相关方法
调用DiffUtil.calculateDiff(new DiffCallBack(oldData, newData), true),生成diffResult;
调用diffResult.dispatchUpdatesTo(mAdapter);
5、不支持点击事件,只能用回调接口来设置点击事件 -> 需外部传入一个点击事件 在onBindViewHolder调下
6、不支持直接在布局中添加分割线
-> DividerItemDecoration(getResources().getDrawable(R.drawable.divider_line))
-> 继承RecyclerView.ItemDecoration类
参考:
https://www.jianshu.com/p/049f0da3b4b1
https://www.jianshu.com/p/01f161cb498c
二、缓存机制
Recycler有4个层次用于缓存ViewHolder对象,优先级从高到底依次为
ArrayList<ViewHolder> mAttachedScrap//缓存数据的viewholder 默认大小2
ArrayList<ViewHolder> mCachedViews //根据viewType分类缓存viewholder,默认大小5
ViewCacheExtension mViewCacheExtension //
RecycledViewPool mRecyclerPool //
参考:https://blog.csdn.net/wzy_1988/article/details/81569156
三、RecyclerView优化
1、数据处理 尽量在外面做 不要做异步
2、View处理 嵌套层次尽量少,特殊界面可自行设置缓存view大小 setRecyclerViewPool 当2个rv样式一样时可用
3、局部刷新 用diffUtil 实现. (可指定pos 删除、添加、更新)
https://www.jianshu.com/p/aedb2842de30
https://www.jianshu.com/p/bd432a3527d6