前言
还是那句话,RecyclerView的viewType越来越多,逻辑变得复杂,几个月后,还能理清思路? 假设我们的服务端通过多个接口返回数据,真的能正确更新合适的type吗? 您是否希望RecyclerView高效、快速地管理整个界面? 你还在用notifyDataSetChanged进行无大脑刷新吗? 您想在一个viewType中自由切换loadingView、dataView和errorView吗? 如果你犹豫了,可以试试这个库。
特征
通过与Adapter的组合关系,可以适合大多数的Adapter
用一行代码更新相应的viewType
支持facebook的斑马路效果
支持粘性头
支持异步刷新并可扩展,包括与RxAndroid配合使用
支持加载相应的type错误页
支持高频刷新(平稳、异步执行) ) )。
效果
线性配置
rqdwl布局
关键字亮点
更新错误页面
高频度刷新
更新内容
type支持错误页面更新(可定制)
支持多个类型(异步、高频率)的同时刷新
链式注册资源
支持个别数据的更新
清除helper的单个类型,清除整个接口api
提供getHeaderId的默认实现抽象类
type支持错误页面更新(可定制)
publicvoidnotifymoudleerrorchanged (errorentityerrordata,int type );
publicvoidnotifymoudleerrorchanged (inttype;
如果只需要一行代码,则错误页面的layoutId将由用户提供,因为前者提供实体类是考虑到一些用户需要根据实体数据的属性进行更新。
支持多个类型(异步、高频率)的同时刷新
//刷新队列,支持高频刷新
private Queue mRefreshQueue;
这里以队列的形式管理刷新,提供清空队列的Api。
链式注册资源
register moudle (@ intrange (from=0,to=999 ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。)
. level(@intrange ) (from=0) int level ) ) ) ) )。
. layout resid (layoutresintlayoutresid ) )。
. header resid (@ layoutresintheaderresid ) ) )。
. loading () )
. loadinglayoutresid(layoutresid ) layoutresintloadinglayoutresid )。
. loadingheaderresid (@ layoutresintloadingheaderresid ) )。
. error () )
. errorlayoutresid (@ layoutresinterrorlayoutresid ) )。
. register (;
由于参数越来越多,我们采用了常见的链接注册,内部通过资源管理器管理所有资源。
注:原注册方式已设置为过时,请立即更新。 如果没有两个版本就会被删除。
支持个别数据的更新
publicvoidnotifymoudledataandheaderchanged (tdata,T header,int type ) )。
某个type可能只有一个实体数据管理着整个type
publicvoidnotifymoudledataandheaderchanged (listextendstdata,T header,int type ) )。
可以传递t的子类的集合
清除helper的单个类型,清除整个接口api
//*
*清除1个type数据
*
* @param type数据类型
*/
publicvoidclearmoudle(inttype;
//*
*清除所有数据
*/
公共void clear (;
提供getHeaderId的默认实现抽象类
我确实讨厌你强迫我写getHeaderId而不实现页眉。 目前,android与java8的兼容性还不够,因此临时提供DefaultMultiHeaderEntity。
使用注意事项
type取值的范围
数据类型[ 0,1000 ]
磁头类型[-1000,0 ]
shimmer数据类型[-2000,-1000
shimmer头类型[-3000,-2000
错误类型[-4000,-3000
常数差
//头型差异
publicstaticfinalintheader _ type _ differ=1000;
//shimmer数据类型差异
publicstaticfinalintshimmer _ data _ type _ differ=2000;
//shimmer头类型差异
publicstaticfinalintshimmer _ header _ type _ differ=3000;
//错误类型差
publicstaticfinalinterror _ type _ differ=4000;
结束了
库的版本也有了一些更新。 你的意见,你的建议,你的star,你的分享,是我前进的动力。 另一个原因是,现在有很多关于LayoutManager、RecyclerView和Adapter的流派,他们都关注优雅地更新数据。
对这个库还不太了解的同学可以在我的github上看到更多的版本。
依赖网格
compile ' com.crazysunj : multitypeadapter :1.3.0 '
接送门