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

Android JetPack组件的支持库Databinding详解

34资源网2022-08-05353

简介

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

分享给朋友:

相关文章

用不言谢造句17句分享

用不言谢造句17句分享

1、大恩不言谢,以后有什么用得上我的,尽管说!2、人们都说大恩不言谢,又说滴水之恩当涌泉相报,谢还是不谢?好为难!那今儿就不谢天不谢地,只谢朋友,谢谢你风雨一路的陪伴。感恩节快乐!3、大恩不言谢,我就是结草衔环,也不足为报。…

初中生创业可以做什么?适合初中生干的创业项目推荐

初中生创业可以做什么?适合初中生干的创业项目推荐

现如今很多初中生因为家里经济条件不是很好,不得已早早的就辍学创业了。那么,初中生创业可以做什么好呢?很多初中生对于刚开始创业很迷糊,不知道该做什么好,接下来小编就给大家推荐几种适合初中生干的创业项目,想创业挣钱的初中生朋友好好看下吧。…

哪家的云主机好(国内五大云主机服务商)

哪家的云主机好(国内五大云主机服务商)

导言:博睿数据(股票代码688229)十余年专注APM领域,已为超过2000余家大型企业提供专业数据服务。依托先进的测评技术及丰富的行业经验,博睿宏远倾力打造了一个公开透明的性能测评栏目——【Bonree指数】。该栏目致力于呈现各行业的整体…

win7开始菜单设置在哪里(win7开始菜单变成经典模式)

win7开始菜单设置在哪里(win7开始菜单变成经典模式)

我们在用win7系统的时候,发现打开了一些程序后,会在开始菜单那里显示这些最近打开的程序。有些人不想把自己最近打开的程序显示在这里,那么怎么可以删除这些程序,或者彻底让这里不会显示最近打开程序呢?下面我来教大家删除或设置不显示最近打开的程序…