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

Android JetPack组件的支持库Databinding详解

34资源网2022-08-05544

简介

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 会跟着一起变化,绑定可观察数据有三种方式:objects、fields 和 collections.

对单个变量的绑定-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

分享给朋友:

相关文章

适合普通人做的小本创业点子

适合普通人做的小本创业点子

适合普通人做的小本创业生意有什么??随着零售行业的兴起,小型超市便利店生意成为创业者首选的项目之一,主要原因在于:投入资金小、回笼快,不需要太大的现金流来支撑、一年半左右就能回本。这对于拥有一部分闲置资金,想创业的投资者来说简直是很好的创业…

抖音如果让我遇见你而你正当年轻是什么歌曲?

抖音如果让我遇见你而你正当年轻是什么歌曲?

《抖音》短视频平台上有不少老歌经过翻唱火了,可能刚好歌词传递的情感引起了网友们的共鸣,而最近比较火的一首歌歌词大概是如果让我遇见你而你正当年轻,好多网友不知道首是什么歌曲?小编刚开始也不知道,后来经过搜索得知这是一首老歌《怨苍天变了心》,是…

曹德旺的经典语录分享

曹德旺的经典语录分享

曹德旺,福耀玻璃集团创始人、董事长。中国反倾销胜诉第一人、中国首善、安永企业家奖首位华人获得者 。福耀玻璃目前是中国第一、世界第二大汽车玻璃供应商。他是不行贿的企业家,自称“没送过一盒月饼”,以人格做事;他是行善的佛教徒,从1983年第一次…

瑞幸喘口气,对手已林立

瑞幸喘口气,对手已林立

图源:摄图网 编者按:本文来自微信公众号螳螂观察(ID:TanglangFin),作者:易不二,创业邦经授权转载 年轻人从未停止消费小蓝杯。 今年夏天生椰拿铁被全网催货的盛景,与9天就突破270万杯销量的丝绒拿铁,都证明了瑞幸的生命力。 从…

双十二可以消失了

双十二可以消失了

编者按:本文转自新熵,作者白芨,编辑月见,创业邦经授权转载。 越来越多的数据表明,美国最大的购物节“黑色星期五”在今年有所遇冷。 福布斯报道显示,与2019年相比,感恩节当天美国实体零售的客流量下降超过九成,原因是高峰被提前分流了——早在“…