zoukankan      html  css  js  c++  java
  • BRVAH(让RecyclerView变得更高效)(1)

    本文来自网易云社区

    作者:吴思博


    对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部、有的要不同类型item排列、等等需求,主要代码有大部分是重复的,如果有一个框架能够帮快速的解决各种需求,那该多好。

    BRVAH是GitHub上一个强大的RecyclerAdapter框架,它能节约开发者大量的开发时间,它集成了大部分列表常用需求解决方案。 该框架于2016年4月10号发布,至今,经历了700多次迭代。


    presentation by 吴思博


    github:https://github.com/CymChad/BaseRecyclerViewAdapterHelper


    official website:www.recyclerview.org

    Author(Brvah) blog:http://www.jianshu.com/u/f958e66439f0


    它能干吗?


    解放你的双手,让你少码代码!                                                                                      

    列表、子布局


    一行代码轻松切换5种动画

    让你感觉又回到ListView时代!

    哼、列表需求来呀!

    它带来了什么好处?


    提高效率

    BRVAH 是 Github 上的一个很棒的开源项目,主要作用是帮助我们更加高效的使用 Recyclerview 控件,处理项目中常见需求的 Adapter,使用起来非常方便。

    BRVAH 主要是针对 Adapter 来设计的,为我们提供了一般情况下的BaseQuickAdapter,和几个特定需求下的Adapter,BaseMultiItemQuickAdapter用于复杂类布局列表;BaseItemDraggableAdapter 用于拖拽移动和滑动删除类列表; BaseSectionQuickAdapter用于带 Section 头部 View 的列表。


    一、框架引入:

    二、基本使用

    Activity代码:(和普通的一样)

    正常的adapter写法:

    onCreateViewHolder(这个方法主要生成为每个Item inflater出一个View,方法返回的是一个ViewHolder。 方法是把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,这个ViewHolder需要我们自己去编写。直接省去了当初Listview的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。)和onBindViewHolder(这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView)等方法。

    使用BRAVH的 Adapter:

    首先需要继承BaseQuickAdapter,然后BaseQuickAdapter<T, BaseViewHolder> 中第一个泛型T是数据实体类型,第二个BaseViewHolder是ViewHolder,其目的是为了支持扩展ViewHolder。

    可以通过viewHolder.getView(viewId)获取该控件。 通过viewHolder.getLayoutPosition() 获取当前item的position。(为什么有数据不显示?检查一下的RecyclerView是否设置了LayoutManager。)

    代码量是3:1的比例!                                          

    和原始的adapter相对,减少了70%的代码量。                      

    实现思路:

    找到重复部分代码,抽取到基类,非重复部分用抽象方法代替,具体让子类实现。具体代码BaseQuickAdapter如下:(onCreateViewHolder方法和普通adapter一样,对onBindViewHolder方法进行了提取,使用抽象方法convert(抽象方法)代替。)

    接下来再看看BaseViewHolder怎么写的:( 把ViewHolder进行了封装,利用了 SparseArray,加快了查找已创建好控件的速度,没有创建再使用findviewbyId再存入SparseArray)


    三、强大的功能

    1. 复杂布局实现(多布局)

    在实际应用中经常会遇到各种样式的列表、宫格和列表同时存在、分类列表等情况。

    1.1 多布局

        在云阅读中的使用:“评论页面”( 优点: 代码量少,节省时间,简洁,清晰,易维护)

     普通多布局写法:

    getItemViewType方法,根据位置获取当前item的类型,在onCreateViewHolder 和 onBindViewHolder中匹配类型进行操作。

    BRAVH是怎么实现?

    1、实体类(UserComment)实现MultiItemEntity接口,在设置数据的时候,给每一个数据设置itemType。

    评论的实体类:

    2、adapter继承BaseMultiItemQuickAdapter类,在构造方法中调用addItemType()方法加入定义的 itemType 和对应布局, 在 Activity 中实例化即可。

    和原始的adapter相对,减少70%的代码量,更加清晰易于维护。

    原理分析:



    网易云免费体验馆,0成本体验20+款云产品! 

    更多网易研发、产品、运营经验分享请访问网易云社区


    相关文章:
    【推荐】 知物由学|见招拆招,Android应用破解及防护秘籍
    【推荐】 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选

  • 相关阅读:
    关于web前端网站优化
    C/S与B/S架构的区别和优缺点
    什么是闭包?闭包的优缺点?
    JavaScript中基本数据类型和引用数据类型的区别
    jQuery对象与DOM对象之间的转换方法
    (转)第05节:Fabric.js的动画设置
    (转)第04节:Fabric.js用路径画不规则图形
    layui表单与原生js表单的一些小问题(三)
    layui表单与原生js表单的一些小问题(二)
    layui表单与原生js表单的一些小问题(一)
  • 原文地址:https://www.cnblogs.com/163yun/p/9729727.html
Copyright © 2011-2022 走看看