最近闲来无事就想抽象出一个RecyclerView通用适配器,提高开发效率,而不需要再去考虑ViewHolder、控件初始化、以及实现BaseAdapter的其他三个必须实现的函数,本文借鉴了网上的一些代码。
#BaseRecyclerAdapter代码
|
|
#RecyclerHolder代码
|
|
实现原理
RecyclerAdapter中规范了Holder,加入了onCreateViewHolder()和onBindViewHolder()方法分别来实现ViewHolder的创建和对Holder中的控件设置内容。
但是适配器写多了以后我们就会发现,其实这两个函数中写的内容也是重复的,于是就有了RecyclerHolder这个我们自己封装的Holder。 与平时我们自己实现的ViewHolder最大的不同在于,我们以前定义ViewHolder都是一个item里面要用哪个控件就定义哪个控件,而为了通用,我们抽出一个集合类存放这些Views, 使用了SparseArray来替代我们的Map,主要是考虑性能(相对的。
还做了一个小小的优化就是在我们我适配器中声明一个全局的boolean变量用来保存此刻是否在滚动,然后通过给RecyclerView设置滚动监听,然后在滚动监听器的onScrollStateChanged()方法中给boolean值赋值,看是否在滚动,这样就可以根据滚动状态的不同来判断:比如正在滚动的时候就只显示内存缓存的图片,如果内存缓存中没有就显示一张默认图片;而如果没有在滚动就采用正常的图片加载方案去加载网络或者缓存中的图片。