android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)

本文来自网易云社区

作者:吴思博

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

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

presentation by 吴思博

它能干吗?

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

列表、子布局

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

让你感觉又回到ListView时代!

哼、列表需求来呀!

它带来了什么好处?

提高效率

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

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

一、框架引入:

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第1张图片

二、基本使用

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第2张图片

正常的adapter写法:

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第3张图片

使用BRAVH的 Adapter:

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第4张图片

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

代码量是3:1的比例!

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

实现思路:

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第5张图片

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第6张图片

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第7张图片

三、强大的功能

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

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

1.1 多布局

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第8张图片

普通多布局写法:

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第9张图片

BRAVH是怎么实现?

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第10张图片

评论的实体类:

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第11张图片

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

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第12张图片

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

原理分析:

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第13张图片

android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1)_第14张图片

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

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

你可能感兴趣的:(android开源系统brvah,BRVAH(让RecyclerView变得更高效)(1))