当前位置:首页 > 谈天说地

Android JetPack组件的支持库Databinding详解

34资源网2022-08-05369

简介

databinding 是 google 在 jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源。使其维护起来更加方便,架构更明确简介。

databinding 唯一的作用,也是他的使命,就是绑定数据,以及所有的支持库,本质上都是为了支持这个功能。绑定一词有两种解释,第一是将数据绑定在 ui 元素;第二是将 ui 上的数据绑定到对应的数据模型,还支持对数据及 ui 的变动观察,其中一个发生变动就需要同步到另一个上去。

启用databinding

首先设置使用 databinding,在 app module 的 build.gradle 中添加如下代码即可:

android {
    ...
    databinding {
        enabled = true
    }
}

布局xml

根结点必须为<layout>,只能存在一个<data>和一个直接子view结点。

variable (变量标签)

变量的属性名name不能包含_下划线,否则再kt文件里会找不到变量,有时可能需要指定自定义类型,可以使用 import 语法来导入类,以及使用 alias 设置别名

    <data>
        <import type="com.example.databinding.entity.user"/>
        <import type="com.example.databinding.entity.user.user" alias="member"/>
        <variable
            name="user"
            type="user" />
        <variable
            name="member"
            type="member" />
    </data>

当需要使用两个同名但不同包名的类,可以使用alias别名属性

data (数据标签)

它有个属性class,可以自定义databinding生成的类名及路径

<data class="observabledatabinding"> </data>

@{}表达式

运算符

关键字

instanceof

字符、字符串、数字、null

类型转换

方法调用

字段访问

数组访问 []

绑定普通数据

databinding 可以绑定普通数据对象(非 observable/livedata)

<data>
        <import type="java.lang.string"/>
        <variable name="content" type="string" />
</data>

绑定可观察数据

绑定可观察数据意味着当数据变化时 ui 会跟着一起变化,绑定可观察数据有三种方式:objectsfieldscollections.

对单个变量的绑定-fields

对于一些数据类只需要其中几个字段支持可观察,那么可以使用这种方式来创建可观察数据

data class user(
	val name: observablefield<string>,
    val likes: observableint
)

基本数据类型直接使用对应的包装类

引用类型使用带有泛型参数的 observablefield 类来创建

val name: observablefield<string>

对集合的绑定-collections

<data>
    <import type="android.databinding.observablelist"/>
    <variable name="user" type="observablelist<object>"/>
</data>
<textview android:text="@{user[index]}" ... />

可以直接使用 [] 运算符( list[0] )获取对应位置的元素

绑定对象-objects

需要绑定的数据实体类继承 baseobservable

class person : baseobservable() {
    @get:bindable
    var country: string = ""
        set(value) {
            field = value
            notifypropertychanged(br.country)
        }
    @get:bindable
    var sex: string = ""
        set(value) {
            field = value
            notifypropertychanged(br.sex)
        }
}

需要支持可观察的数据上添加 @get:bindable 注解,然后重写 set 方法,在其中调用 notifypropertychanged 方法表示更新该数据,br 是自动生成的,包名跟当前包名一致,会根据 bindable 注解的变量生成对应的值;也可以调用 notifychange() 方法更新所有数据

绑定livedata

livedata也支持数据绑定

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable name="desc"
            type="androidx.lifecycle.mutablelivedata&lt;string>" />
    </data>
...
    <textview
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
           android:layout_gravity="center_vertical"
           android:text="@{desc}" />
</layout>

我们可以直接将 livedata 赋值给 text,然后绑定数据

val desc = mutablelivedata<string>()
binding.desc = desc

双向绑定

单向绑定是指数据变化后更新 ui,而双向绑定是指其中任意一个变化后都会同步更新到另一个。

双向绑定使用 @={} 表达式来实现:

<data>
    ...
        <variable
            name="input"
            type="androidx.databinding.observablefield&lt;string>" />
    </data>
...
<edittext
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@={input}"/>

到此这篇关于android jetpack组件的支持库databinding详解的文章就介绍到这了,更多相关android jetpack组件内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/20422.html

分享给朋友:

相关文章

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡智能拖地机是东莞市宝联电子科技有限公司旗下产品,隶属于香港概念数码科技有限公司,其主要研发机器人吸尘器等高科技领域家居产品,想知道卡卡智能拖地机好用吗,看看下面是网友使用koko卡卡智能拖地机的相关介绍,希望对大家有所帮助。1、…

分享30句用被刺造句的句子

分享30句用被刺造句的句子

1、黄昏已经谢去,夜幕早已铺开。高高的法国梧桐,被刺眼的白色路灯照亮。在黑色的夜空里镶了一圈又一圈攫绿,有时被拂过的夜风飘动,发出轻轻的沙沙声,只那么一阵,就消失在无限的宁静之中。…

视频号入口在哪里(视频号直播入口新手手册)

视频号入口在哪里(视频号直播入口新手手册)

视频号助手在哪里?视频号助手什么时候上线?微信视频号助手正式上线目前微信视频号助手已经开始内测使用了,大家可以直接在PC端扫码登录,管理自己的视频号,可以看到自己的各项动态数据,非常方便管理。 视频号助手在哪里 视频号助手在哪里? 手机微…

闪客快跑2背景音乐(闪客快打andylaw的微博)

闪客快跑2背景音乐(闪客快打andylaw的微博)

《疯狂跑酷》是一款LowPoly(低多边形)画风的跑酷游戏,一场突如其来的大水淹没了城市,而你在游戏中扮演一名刚下班的男子,需要从被水淹没的城市中逃出生天。…

区块链开发技术有前景吗(区块链技术开发费用)

由于人们对大数据、区块链、人工智能行业的认识越来越深入,企业可以通过大数据、区块链、人工智能等思维和技术寻求变革。传统行业依靠原有产业优势“后来居上”,低调布局区块链技术,传统产业企业和科技企业同时进入产业区块链赛道。在区块链发展报告中,我…

ab压力测试命令(在线ddos免费测压平台)

ab压力测试命令(在线ddos免费测压平台)

ab 是apache对 http服务器进行压力测试的工具,它可以测试出服务器每秒可以处理多少请求。本文记录mac版本安装 ab 的步骤以及遇到的坑。 下载 进入 apache ab官网 下载页面。 安装 brew 安装 因为笔者的操作系统…