实现RecyclerView很简单
前言
在日常开发中对于列表的使用无处不在,以前我们主要是用ListView、GridView等adapterView进行UI显示,Google在2014年推出了RecyclerView之后让我们实现列表UI更加的容易、丰富且性能更强
RecyclerView的使用
RecyclerView与之前的ListView不同,RecyclerView本身只负责View的绘制显示,不负责数据的操作,这个在我们实现RecyclerView.Adapter之后对其进行数据操作的时候就会知道,这也是他之所以比ListView性能更高的原因之一!
当我们对adapter数据源进行操作之后调用对应的notify方法(例如:notifyItemChanged),就会发现这时候,我们只是更新了UI其实没有更新数据和ItemView的关联关系。那是因为在RecyclerView中除了position之外还有一个叫做layoutPosition,看名字应该也知道,所以一般而言我们更新adapter数据之后一般还会调用notifyItemRangeChanged方法以刷新ItemView与数据的关联关系!
RecyclerView使用步骤
在这里我们主要不是为了介绍RecyclerView的使用,如果还有不明白的可以去查一下,这种文章到处都是,一般实现一个列表的步骤如下:
- 实现一个ViewHolder 继承RecyclerView.ViewHolder
- 实现一个adapter 继承RecyclerView.Adapter
- 得到一个RecyclerView对象
- 给RecyclerView对象设置LayoutManager
思考
到了这里,大家就会发现其实在日常开发中肯定不会是这么个步骤,因为太麻烦了,今天我带来的就是这么一个封装之后的baserecycleradapter,其中加入了一些日常开发中需要的小功能
baserecycleradapter设计原理
以前我们实现ListView的适配器的时候如何进行优化实现方案,我们会给每一个convertView设置一个ViewHolder的tag,如今RecyclerView要求我们必须实现这么一个ViewHolder,与之前有所不同,那就是这个ViewHolder是View的一个载体,通过adapter中的onBindViewHolder方法进行处理业务数据逻辑。
设计思路
接口回调是通过相信大家都不会陌生,这个baserecyceradapter的实现思路就是借用java中的继承关系默认实现一个baseViewHolder,从而让平时开发中减少一个ViewHolder的实现步骤,同时借用一个BaseAdapter进行处理相关的几个方法:
- onBindViewHolder
- onCreateViewHolder
在开发的时候我们只需要继承BaseAdapter就可以实现很多业务了,达到我们之前ListView一样的模式,同时为了便于老的项目将ListView改用成为RecyclerView,特意将暴露的initView方法中参数和ListView适配器中的getView一致以降低迁移成本
BaseAdapter的方法
BaseAdapter主张由适配器管理数据源,这样一来就避免了数据源的操作异常,同时为了让调用者不需要关心调用调用场景,BaseAdapter中允许在子线程中直接操作适配器的数据源方法:
方法名字 | 作用 |
---|---|
clearAll() | 清楚所有数据 |
addList | 添加一个数据集合到数据源中 |
add | 添加一个对象 |
containItem | 判断对象是否存在于数据集合中 |
getPosition | 如果对象在集合中返回其position,否则返回-1 |
deleteItem | 从数据源中删除对象 |
updateItem(int position) | 这个方法指的是刷新数据源中的对象 |
updateItem | 更新对象 |
以上查找类方法建议实现以下equals方法,否则可能不能起作用
其他
目前为了方便使用baserecycleradapter加入了几个实现好了的适配器,具体可以查看 这里
网友评论