前言
还是那句话,RecyclerView的viewType增多,逻辑变复杂,几个月后,你确定还能理清思路吗?假设我们服务端是多个接口返回数据,你确定能正确刷新相应type吗?想一个RecyclerView高效快捷管理整个界面吗?你还在使用notifyDataSetChanged无脑刷新吗?你想单个viewType在loadingView,dataView,errorView自如切换吗?如果你迟疑了,那你不妨试试本库。
特点
- 与Adapter为组合关系,可配合大多数Adapter
- 一行代码刷新相应viewType
- 支持facebook的shimmer加载效果
- 支持粘性头
- 支持异步刷新,可扩展(如配合RxAndroid)
- 支持加载相应type错误页面
- 支持高频率刷新(流畅,异步执行)
效果
线性排布
![](https://img.haomeiwen.com/i13855150/3326e218799270f0.gif)
方格排布
![](https://img.haomeiwen.com/i13855150/4e5cde8aabb83779.gif)
关键字高亮
![](https://img.haomeiwen.com/i13855150/c81c6df79c1e3fc0.gif)
刷新错误页面
![](https://img.haomeiwen.com/i13855150/bf323458b857fca1.gif)
高频率刷新
![](https://img.haomeiwen.com/i13855150/136fbb1142e1f1bb.gif)
更新内容
- 支持刷新type错误页面(可自定义)
- 支持同时刷新多个type(异步,高频率)
- 链式注册资源
- 支持刷新单个数据
- 提供helper的清除单个type,清除整个界面api
- 提供getHeaderId的默认实现抽象类
支持刷新type错误页面(可自定义)
![](https://img.haomeiwen.com/i13855150/631f0ff5000c683b.png)
一行代码搞定,前者提供实体类是考虑有些用户需要根据实体数据属性去更新,因此错误页面的layoutId是用户提供的。
支持同时刷新多个type(异步,高频率)
![](https://img.haomeiwen.com/i13855150/d8dc3229479336a6.png)
这里采用的是队列的形式管理刷新,提供清空队列的Api。
链式注册资源
![](https://img.haomeiwen.com/i13855150/2544bfce87e89724.png)
由于参数越来越多,这里采用了较为流行的链式注册,内部通过ResourcesManager管理所有资源。
注:原来的注册方式已设置为过时,请及时更新,不出2个版本将移除。
支持刷新单个数据
![](https://img.haomeiwen.com/i13855150/3a815cfd72ca8e03.png)
可能某个type只有一个实体数据管理着整个type
![](https://img.haomeiwen.com/i13855150/0970b2014dad298c.png)
可传T的子类集合
提供helper的清除单个type,清除整个界面api
![](https://img.haomeiwen.com/i13855150/d6722955dcd2073f.png)
提供getHeaderId的默认实现抽象类
假设你不实现粘性头而强制要写getHeaderId确实挺讨厌的,由于现在android还不是很好地兼容java8,因此暂时提供DefaultMultiHeaderEntity。
使用注意点
type 取值范围
- level [0,+∞)
- 数据类型 [0,1000)
- 头类型 [-1000,0)
- shimmer数据类型 [-2000,-1000)
- shimmer头类型 [-3000,-2000)
- error类型 [-4000,-3000)
常量差值
![](https://img.haomeiwen.com/i13855150/bb338372aff487bb.png)
结束
库多多少少也更新几个版本了,你的意见,你的建议,你的star,你的分享,一直是我前进的动力。还有一点要说的就是现在关于LayoutManager,RecyclerView,Adapter的流派很多,我们更关注于数据的优雅刷新。
gradle依赖
![](https://img.haomeiwen.com/i13855150/e2f4c4c39d1e007b.png)
网友评论