相关阅读:
使用Kotlin优雅的开发Android应用,附demo
吊炸天!74款APP完整源码!
Kotlin学习资料大全,附学习视频首发
作者:crazysunj
原文地址: http://crazysunj.com
本文为crazysunj 同学投稿文章,并获得作者授权!
前言
还是那句话,RecyclerView的viewType增多,逻辑变复杂,几个月后,你确定还能理清思路吗?假设我们服务端是多个接口返回数据,你确定能正确刷新相应type吗?想一个RecyclerView高效快捷管理整个界面吗?你还在使用notifyDataSetChanged无脑刷新吗?你想单个viewType在loadingView,dataView,errorView自如切换吗?如果你迟疑了,那你不妨试试本库。
特点
效果
线性排布
方格排布
关键字高亮
刷新错误页面
高频率刷新
更新内容
支持刷新type错误页面(可自定义)
1 2 3
| public void notifyMoudleErrorChanged(ErrorEntity errorData, int type); public void notifyMoudleErrorChanged(int type);
|
一行代码搞定,前者提供实体类是考虑有些用户需要根据实体数据属性去更新,因此错误页面的layoutId是用户提供的。
支持同时刷新多个type(异步,高频率)
1 2
| //刷新队列,支持高频率刷新 private Queue> mRefreshQueue;
|
这里采用的是队列的形式管理刷新,提供清空队列的Api。
链式注册资源
1 2 3 4 5 6 7 8 9 10
| registerMoudle(@IntRange(from = 0, to = 999) int type) .level(@IntRange(from = 0) int level) .layoutResId(@LayoutRes int layoutResId) .headerResId(@LayoutRes int headerResId) .loading() .loadingLayoutResId(@LayoutRes int loadingLayoutResId) .loadingHeaderResId(@LayoutRes int loadingHeaderResId) .error() .errorLayoutResId(@LayoutRes int errorLayoutResId) .register();
|
由于参数越来越多,这里采用了较为流行的链式注册,内部通过ResourcesManager管理所有资源。
注:原来的注册方式已设置为过时,请及时更新,不出2个版本将移除。
支持刷新单个数据
1
| public void notifyMoudleDataAndHeaderChanged(T data, T header, int type)
|
可能某个type只有一个实体数据管理着整个type
1
| public void notifyMoudleDataAndHeaderChanged(List extends T> data, T header, int type)
|
可传T的子类集合
提供helper的清除单个type,清除整个界面api
1 2 3 4 5 6 7 8 9 10 11
| /** * 清除单个type数据 * * @param type 数据类型 */ public void clearMoudle(int type); /** * 清除所有数据 */ public void clear();
|
提供getHeaderId的默认实现抽象类
假设你不实现粘性头而强制要写getHeaderId确实挺讨厌的,由于现在android还不是很好地兼容java8,因此暂时提供DefaultMultiHeaderEntity。
使用注意点
type 取值范围
常量差值
1 2 3 4 5 6 7 8
| //头类型差值 public static final int HEADER_TYPE_DIFFER = 1000; //shimmer数据类型差值 public static final int SHIMMER_DATA_TYPE_DIFFER = 2000; //shimmer头类型差值 public static final int SHIMMER_HEADER_TYPE_DIFFER = 3000; //错误类型差值 public static final int ERROR_TYPE_DIFFER = 4000;
|
结束
库多多少少也更新几个版本了,你的意见,你的建议,你的star,你的分享,一直是我前进的动力。还有一点要说的就是现在关于LayoutManager,RecyclerView,Adapter的流派很多,我们更关注于数据的优雅刷新。
如果对本库还不是很了解的同学可以到我的github查看更多版本进行了解。
gradle依赖
1
| compile 'com.crazysunj:multitypeadapter:1.3.0'
|
传送门
github:https://github.com/crazysunj/MultiTypeRecyclerViewAdapter
博客:http://crazysunj.com/
更多学习资料点击下面的“阅读原文”获取