RecyclerView使用和封装过很多次了。但从来没有去认真研究过源码,一是没时间,二是后面的工作原因,不怎么接触到。
今天来简单整理下。
RecyclerView可以说是ListView替代品了,就是因为他能做到的,ListView做不到,ListView有的,他都有。
简单记
ListView和RecyclerView的区别,还是很大的。
第一,直接父类的不同,RecyclerView直接继承ViewGroup。
1、ListView extends AbsListView ... extends AdapterView ... extends ViewGroup
2、RecyclerView extends ViewGroup
第二,Adapter大不同
1、ListView使用的是继承Adapter接口的适配器,自己实现重用逻辑;
2、RecyclerView继承的是内部类Adapter<VH extends ViewHolder>,他已经帮我们ViewHolder类来协助我们完成Item绘制
第三、缓存小不同
1、ListView有三级缓存
RecycleBin中含有
屏幕中活动的mActionView(数组)、
超出屏幕废弃的mScrapViews(ArrayList集合)、
保存特殊状态的缓存mTransientStateViews(SparseArray稀疏数组)这三级缓存
2、RecyclerView有四级缓存
Recycler是RecyclerView封装的回收机制类,里面包含
用于屏幕内快速重用的mAttachedScrap、
超出屏幕外的缓存mCachedViews(默认上限是2个)、
用户自定义的一个缓存对象mViewCacheExtension、
默认最大上限为5个的mRecyclerPool(这个很特殊,大家可以去找相关的资料看看)。
第四、刷新大不同
1、ListView直接通过invalidate、postInvalidate、requestLayout三种刷新整个界面
2、RecyclerView可以使用invalidate刷新整个,也可以刷新某一个item,并且按照不同的动作来刷新,比如notifyItemChanged、notifyItemInserted、notifyItemMoved等刷新方式。
第五、实现的功能不同
1、ListView只能上下排列Item
2、RecyclerView可以是GridView那样的九宫格、可以横竖排列、也可以是流行的瀑布流
LinearLayoutManager(横竖排列)、
GridLayoutManager(九宫格)、
StaggeredGridLayoutManager(瀑布流)
第六、动画
1、ListView需要自己写动画
2、RecyclerView自带了就有。
以上的对比,就是为了体现RecyclerView的强大。没别的意思,ListView别伤心。
ListView比较RecyclerView不是一点优点也没的。
1、ListView优点:
a、设置分割线方便;
b、ListView实现添加HeaderView和FooderView有直接的方法;
c、ListView实现onItemClickListence和onItemLongClickListence有直接的方法
2、RecyclerView的有点
a.封装了ViewHodler,效率更高
b.可以添加增删Item动画、侧滑功能等
c.支持局部更新,可见才更新,不可见不更新
d.插件式实现,各个功能模块化,解耦性强,使用起来更方便
其实ListView的优点,RecyclerView也是可以封装的嘛!
进阶记
RecyclerView值得一提的就是他强大的缓存机制了。
发现了一个非常详细的文章了,直接盗用了。