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 的列表。


一、框架引入:

b120a1a2-c121-4e80-95bc-c05c24b4a973

二、基本使用

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

cf050596-5d08-4356-b642-1a81050e6b82

正常的adapter写法:

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

2375df17-e4bb-4370-851a-042883b1554b

使用BRAVH的 Adapter:

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

6efbcac2-662e-44c9-8c60-de9dea52b9f4

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

代码量是3:1的比例!                                          

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

实现思路:

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

9968d437-8f75-44f0-9551-1b54e0941e1d

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

08fbeba8-f8fc-4de7-85d9-9477f311274e


b4c0e0d2-e15f-46ab-9f4f-11ec0ba8082d

 

 

三、强大的功能

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

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

 

1.1 多布局

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

22433a1f-fe87-4591-aefc-392a3428f0df

 

 普通多布局写法:

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

48cf134f-7d66-4a4f-aefe-c10f4cffadc3

BRAVH是怎么实现?

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

c9b02883-c911-4df3-8419-8ac629a4da9d

评论的实体类:

3147b93c-e8e1-439e-84f0-9e26b1953146

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

37adcbb9-25b1-4599-9a2f-475a57b5dbcd

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

原理分析:

0d1747f2-b5b6-4287-88fb-70f9778e2fdc

663931fd-5403-434f-8450-fa36aded34be



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

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


相关文章:
【推荐】 知物由学 | 见招拆招,Android应用破解及防护秘籍
【推荐】 最小化局部边际的合并聚类算法(中篇)
【推荐】 一步一步学习JNI