大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  • 加入社区3,273天
  • 写了333,609字

该文章投稿至Nemo社区   Android  板块 复制链接


XRecyclerView 源码分析

发布于 2017/05/27 10:46 1,888浏览 0回复 1,137

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



 用法实例:





最终效果


https://github.com/tzz2015/commonLib.git

本文标签
 {{tag}}
点了个评