美文网首页
实现RecyclerView很简单

实现RecyclerView很简单

作者: 风雨沉安 | 来源:发表于2017-05-09 21:51 被阅读0次

    实现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加入了几个实现好了的适配器,具体可以查看 这里

    相关文章

      网友评论

          本文标题:实现RecyclerView很简单

          本文链接:https://www.haomeiwen.com/subject/zswitxtx.html