XRecyclerView是一款非常好用的自定义recycleview,友好的支持下拉刷新上拉加载,添加头布局和底布局,目前使用没有bug,可根据自己的
需求进行修改,代码注释明了,代码风格良好,非常通俗易懂,废话不多说,走一走源码。(必须要对recycleview有一定的了解,才好理解)
适配器:WrapAdapter 分析
构造方法里面引入头布局和底布局集合,使用集合方式非常方便我们添加多个布局,还有自己写的适配器
getItemCount()方法
如果自定义适配器不为空,则总长度就是头布局数量+底布局数量+自定义适配器数量
getItemViewType()方法
值得注意的是adjPosition,必须减去头布局数量,才是自定义适配器的positon 否则显示不准,并且发生角标越界
onCreateViewHodler()方法
onAttechToRecyclerView() 方法
如果是宫格布局的recycleview,刷新头和底部加载布局设置占满宫格,即有多少列就占多少列 (getSpanCount())
XRecyclerView 代码分析:
是否可以刷新和加载更多通过public方法传入,默认支持下拉刷新和加载更多
下拉刷新
通过监控recycleview的onTouchEven事件,进行显示和隐藏刷新头,move里面的关键代码mRefreshHeader.onMove(deltaY / DRAG_RATE);
该代码根据下拉的高度修改文字的显示
手指离开屏幕后根据mRefreshHeader.releaseAction()这个方法判断是否刷新 加载完成可调用refreshComplete()
加载更多
通过监听recycleview的滚动状态判断是否需要加载更多和是否滚动到最后一条数据
延迟1000中加载更多数据
加载完成可调用refreshComplete()或者loadMoreComplete()
适配器BaseRecyclerViewAdapter
原适配器通过泛型传入list的类型,我修改成所有list里面的bean为BaseRecycleviewModle,就是说所有的实体必须继承与它
原有的适配器不设置getItemViewType(),通过basereclerview的viewtype就很容易设置了,默认实现该方法,具体使用参考
https://github.com/tzz2015/commonLib.git
在BaseRecyclerViewHolder 默认支持databinding
用法实例:
最终效果