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

Android JetPack组件的支持库Databinding详解

34资源网2022-08-05396

简介

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

分享给朋友:

相关文章

带货直播运营怎么做(直播公司盈利模式)

带货直播运营怎么做(直播公司盈利模式)

直播网红千千万,谁能争当NO.1?随着直播崛起,越来越多的人想要入场分一杯羹,BUT,80%的人都不懂直播运营的内容法则。那么,新手主播怎么玩才能快速脱颖而出呢?掌握这四大直播运营的内容规则,人气轻松翻倍!1. 直播内容多样化…

购买须知模板怎么编辑(淘宝买家须知免费素材)

购买须知模板怎么编辑(淘宝买家须知免费素材)

为了帮助您入门,在您注册 Shopify 帐户时,后台的模版页面中会设置一个默认模版。如果您想为在线商店自定义一个不同的模版,则需要向后台添加一个模版。 您可通过以下几种方式添加模版: 如果您的计算机上的 .zip 文件中已有一个模版,那么…

刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

编者按:本文来自雷达财经(ID:leidacj),创业邦经授权发布。 作者|张凯旌 编辑|深海 京东在私募股权投资上又有新动作。 11月29日,由刘强东、章泽天、李瑞玉共同持股的海南三亚天博产业私募基金管理有限公司(下称“海南天博私…

从商品采购到商品开发,叮咚买菜打造生态型供应链体系

作者:苏敏 编辑:房煜 随着社会发展,人们越来越重视食品品质和安全问题,消费趋势也从“性价比”转向“品价比”,对让人放心又有特色的好商品的需求正与日增多。这就给如今的零售商们带来了新的挑战,也促进了行业合作中零供关系的升级。 在12月3日的…

首页页眉怎么去掉横线(教你三招快速处理)

首页页眉怎么去掉横线(教你三招快速处理)

Word可以说是office里算简单的了,不管是谁都能比较好的使用Word,但是要用好Word也不是那么容易的。所以今天介绍的这几个Word小技巧也是十分实用的,快来学起来吧! 字符加圈圈 一 很多时候,我们在编号的时候总会用到这个带圈字…

gta5画面设置1060最新(gta5超低配流畅设置)

gta5画面设置1060最新(gta5超低配流畅设置)

《GTA5》这款游戏需要的配置要求并不高,而且优化非常好,不需要太高的配置就可以高画质流畅运行,而配置比较低的话就需要一些调整画质减轻模糊程度的方法了,首先是把画质全部调最高,更多如下。 gta5怎么调画质 首先要画质好先把全部调最高,然…