跳转至

使用

BRV为快速构建RV列表工具, 以开源分享来完善, 将一直保持社区维护


STAR/分享可以让更多人参与到本开源项目


前言

  1. 阅读文档, 快速了解
  2. 阅读示例, 快速运用
  3. 阅读源码, 熟练并拓展

简单示例

rv.linear().setup {
    addType<SimpleModel>(R.layout.item_simple)
}.models = getData()
文档提及的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

apply plugin: "kotlin-kapt" // 必要

android {
    /.../
    buildFeatures.dataBinding = true
}

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>
选中行是DataBinding使用方法

3. 自动绑定

在Application中初始化, DataBinding会根据modelId自动绑定models到xml中

BRV.modelId = BR.m

  1. 先在某个布局中声明<layout>布局中的变量m(推荐命名), BR.m才能被生成
    一旦声明BRV.model = BR.m所有BRV使用的item布局使用name="m"来声明才能自动绑定
  2. 导入主Module的BR, 这样所有使用该Id来声明数据模型的布局都会被BRV自动绑定数据
  3. 如没有生成可Make Project(小锤子)

4. 构建列表

rv.linear().setup {
    addType<SimpleModel>(R.layout.item_simple)
}.models = getData()

组件化项目

多Module组件化项目要求主Module及使用DataBinding的Module都开启DataBinding及Kapt, 否则抛出NoClassDefFoundError找不到BR类

DataBinding

使用DataBinding可以复制或者引用我的常用自定义属性: DataBindingComponent.kt
如果想更了解DataBinding可以阅读一篇文章: DataBinding最全使用说明


下载Apk 下载源码 示例代码