使用
BRV为快速构建RV列表工具, 以开源分享来完善, 将一直保持社区维护
STAR/分享可以让更多人参与到本开源项目
前言
- 阅读文档, 快速了解
- 阅读示例, 快速运用
- 阅读源码, 熟练并拓展
简单示例¶
文档提及的rv
为RecyclerView简称, Model即数据类/bean/pojo
四种使用方式¶
BRV可自由扩展, 几乎支持市面上所有写法, 请按场景酌情考虑
编码规范
某些开发者无视建议写垃圾代码和本框架无关
onBind - 简单¶
在onBind
函数中填充数据, 适用于简单代码(去繁就简)
rv.linear().setup {
addType<SimpleModel>(R.layout.item_simple)
onBind {
findView<TextView>(R.id.tv_simple).text = getModel<SimpleModel>().name
}
}.models = getData()
接口实现 - 解耦 BRVAH¶
为Model实现接口ItemBind
, 在onBind
中赋值数据, 适用于复杂数据但又不想使用双向数据绑定
耦合
不推荐, 会导致业务逻辑和视图代码耦合, 不便迭代
但这种方式在很多框架中被使用, 例如BRVAH
, 可以方便从其他框架迁移到BRV
class SimpleModel(var name: String = "BRV") : ItemBind {
override fun onBind(holder: BindingAdapter.BindingViewHolder) {
holder.findView<TextView>(R.id.tv_simple).text = holder.layoutPosition.toString()
}
}
ViewBinding - 查找视图¶
要求开启ViewBinding, 上面接口实现方式也可以通过getBinding()
使用
rv.linear().setup {
addType<SimpleModel>(R.layout.item_simple)
onBind {
val binding = getBinding<ItemSimpleBinding>() // ViewBinding/DataBinding都支持
val data = holder.getModel<SimpleModel>()
}
}.models = getData()
DataBinding - 数据绑定¶
通过DataBinding实现数据绑定, 可以自动填充数据, 适用于任何场景
推荐
这是最简洁优雅/最安全的一种绑定数据方式
1. 启用DataBinding¶
首先在module中的build.gradle
中开启DataBinding
2. 布局声明变量¶
第二步, 在Item的布局文件中声明变量, 然后绑定变量到视图控件上
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="m"
type="com.drake.brv.sample.model.SimpleModel" />
</data>
<TextView
android:id="@+id/tv_simple"
android:text="@{String.valueOf(m.name)}"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="100dp" />
</layout>
3. 自动绑定¶
在Application中初始化, DataBinding会根据modelId
自动绑定models
到xml中
- 先在某个布局中声明
<layout>
布局中的变量m
(推荐命名),BR.m
才能被生成
一旦声明BRV.model = BR.m
所有BRV使用的item布局使用name="m"
来声明才能自动绑定 - 导入主Module的BR, 这样所有使用该Id来声明数据模型的布局都会被BRV自动绑定数据
- 如没有生成可
Make Project
(小锤子)
4. 构建列表¶
组件化项目
多Module组件化项目要求主Module及使用DataBinding的Module都开启DataBinding及Kapt, 否则抛出NoClassDefFoundError找不到BR类
DataBinding
使用DataBinding可以复制或者引用我的常用自定义属性: DataBindingComponent.kt
如果想更了解DataBinding可以阅读一篇文章: DataBinding最全使用说明