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. 复杂布局实现(多布局)
在实际应用中经常会遇到各种样式的列表、宫格和列表同时存在、分类列表等情况。
在云阅读中的使用:“评论页面”( 优点: 代码量少,节省时间,简洁,清晰,易维护)
普通多布局写法:
getItemViewType方法,根据位置获取当前item的类型,在onCreateViewHolder 和 onBindViewHolder中匹配类型进行操作。
BRAVH是怎么实现?
1、实体类(UserComment)实现MultiItemEntity接口,在设置数据的时候,给每一个数据设置itemType。
评论的实体类:
2、adapter继承BaseMultiItemQuickAdapter类,在构造方法中调用addItemType()方法加入定义的 itemType 和对应布局, 在 Activity 中实例化即可。
和原始的adapter相对,减少70%的代码量,更加清晰易于维护。
原理分析:
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 知物由学|见招拆招,Android应用破解及防护秘籍
【推荐】 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选