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

Android JetPack组件的支持库Databinding详解

34资源网2022-08-05479

简介

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

分享给朋友:

相关文章

免费的包子,好心做了好事却害了自己

免费的包子,好心做了好事却害了自己

中午与老板一块吃饭,听到了一个老好人事件。就是一包子铺老板许坤免费送人包子事件!这是个真实的事件,现在网上有流传,下边的内容来源于某个平台,大家一起来看看吧。…

Hey,Siri 背后,隐藏着一个大问题

Hey,Siri 背后,隐藏着一个大问题

编者按:本文来自腾讯研究院(cyberlawrc),作者:白鸽,创业邦经授权发布,封面图来自图虫。 豆瓣平台上有一个名叫“人机之恋”的小组,组内成员分享的大部分内容,都是一款聊天软件 Replika 的使用心得。通过这款软件,用户可以与自己…

网站403怎么解决(网站403的解决办法)

网站403怎么解决(网站403的解决办法)

使用代理IP时经常会遇到各种问题,其中403错误并不少见。在上一篇《使用代理IP遇到403错误的可能原因有哪些》文中介绍了一些403错误的可能原因,今天我们一起来看看如何解决403错误,让工作可以正常进行。 一、代理服务器端返回的403错…

蜂鸟配送快递查询(饿了么团队版app)

蜂鸟配送快递查询(饿了么团队版app)

万能的用户需求造就万能的蜂鸟小哥 自从2018年饿了么旗下即时物流平台蜂鸟品牌融入阿里巴巴生态以来,很多人都有一个共同感觉:蜂鸟每前进一小步,本地生活服务就向前跨进了一大步。 如今,背靠阿里巴巴大数据平台的蜂鸟也从单纯的外卖服务品牌成长为数…

联想智能手机手机(联想手机大全最新款)

联想智能手机手机(联想手机大全最新款)

11月8日,联想中国区手机业务部总经理@神奇的劲哥在微博官宣,moto edge X进入倒计时阶段。@神奇的劲哥透露,这一次moto edge X无限强大,充满期待,从他透露的消息来看,这款手机大概率会搭载高通sm8450处理器(命名或为“…