Android databinding的接入使用与详解(一)

news2024/12/23 5:35:34

一、介绍

         DataBinding 是Google Android组件框架,管理view和data之间进行绑定。DataBinding主要管理数个布局文件,这样我们就不用去实例化layout的view。直接通过DataBindingUitl来完成初始化。

这样可以精简代码,也减少工作量,避免view的空指针等。大量减少Activity/fragment模块内的代码,DataBinding 将数据实现单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针。

二、如何使用

1、引入DataBinding的库

只要在模块的build文件下,android{}节点内,新增如下

dataBinding {
    enabled = true
}

这样就开启了dataBinding库,同步一下项目,将库同步到本地

2、布局的创建与布局文件生成

1.新建一个布局文件叫:layout_databinding_simple

关于DataBinding绑定layout的有两种方式

第一种:IDE自动完成

             将鼠标移到布局代码上,会有黄色灯提示,然后选择Convert to data binding layout

IDE工具将会把layout的布局自动完成转码

 

 第二种:手动完成

把根布局换成layout,然后原来的root布局不变,在布局顶部新增data节点

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <data>

        
    </data>

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/text_value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </FrameLayout>
</layout>

3、布局文件生成对应的代码文件

布局设置好后,IDE会自动生成对应的文件

layout name:layout_databinding_simple

生成文件名:LayoutDatabindingSimpleBinding,格式就是布局文件名后缀接Binding

注意:关于这个文件生成,好多技术博客并没有介绍,只是简单的说了一句,导致好多新手找不到后缀为Binding的文件。

 

4、加载布局文件,生成对应的控制器

通过DataBindingUtil工具类完成view的设置与加载

var databinding = DataBindingUtil.setContentView<LayoutDatabindingSimpleBinding>(
    this,
    R.layout.layout_databinding_simple
)

1.setContentView<T>

T:泛型直接传布局layout生成的对应类LayoutDatabindingSimpleBinding,

加载完后,view 已完成了初始化,包括内部,直接通过databinding管理view和data

5、ViewDataBinding介绍

ViewDataBinding是view和data的管理类,如果你在

如果你在layout中有一个TextView id为 textname,那么直接就可以databinding.textname获取对象

如果你在layout data数据节点下有一个name 为name的节点,可以通过databinding.setName()设置数据源

在layout中绑定的数据,都是通过ViewDataBinding来设置与更新的

1.更新数据

<data>

</data>

2.获取view

获取的view,直接关联到对应的id,如果没有申明id,那么将不会出现在binding中

5、数据绑定

数据源的绑定至关重要,离开数据源,view也没有什么实际价值。

如何简单的绑定数据源呢?

1.设置数据源

简单类型,复杂类型,用户自定义,简单类型,在Java.lang包下,无须导入,可以直接使用,非简单内容,在使用时都需要导入对应的包,如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <import type="com.example.wiik.testdemo.databinding.data.MyPerson" />



        <variable
            name="person"
            type="MyPerson" />

        <variable
            name="name"
            type="String" />

        <variable
            name="age"
            type="String" />

        <variable
            name="sex"
            type="Boolean" />



    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/btn_click"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="点击" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="姓名 :" />

            <TextView
                android:id="@+id/textname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{name}" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="年纪 :" />

            <TextView
                android:id="@+id/textage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{age}" />
        </LinearLayout>


    </LinearLayout>
</layout>

data节点下有两个

1.import :导入变量的解决路径,和包中引入是一个概念

2.variable:变量的申明,name=定义名称,type:类型

2.view数据绑定

如果view的数据需要绑定,那么数据源来源于data节点下的设置。

绑定数据的格式:@{变量}

1.绑定复杂数据 :@{person.name}

2.简单直接引用data name即可

       <TextView
                android:id="@+id/textage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{age}" />

三、错误处理

如果出现以下错误,在生成的文本中

 

        这是因为layout的布局生成对应的java或者kt文件失败。因为layout的data节点或者view在引用时出现错误,

排查

1、删除view中数据的引用@{}

        删除数据关联,然后同步数据,看是否排查完

2、data节点数据引用出错

        第一步排查完还没有解除,开始排查data节点,注销复杂的数据类型,查看variable 节点下的type是否可以关联到代码,如果关联不到,说明type类型有误

        第二看import是否正确,直接通过ide关联代码,如果能正常跳转说明关联正常。

以上排查完后,再同步一下ide工具,重新生成对应的文件即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022双十二有哪些值得入手的数码好物?值得入手的数码好物推荐

双十二快到了&#xff0c;不少人都会选择在这个时候入手数码产品&#xff0c;但又不知道有哪些值得入手。下面&#xff0c;我来给大家推荐几款实用性高&#xff0c;入手性强的数码好物&#xff0c;感兴趣的一起来看看吧。 一、南卡小音舱蓝牙耳机 推荐理由&#xff1a;蓝牙5.…

带你初识JSP(JAVA服务器页面)

文章目录前言第一个 JSP 程序什么是Java Server Pages?为什么使用JSP&#xff1f;JSP的优势配置Java开发工具&#xff08;JDK&#xff09;设置Web服务器&#xff1a;Tomcat设置 CLASSPATH 环境变量JSP 结构JSP 处理JSP 生命周期JSP编译JSP初始化JSP执行JSP清理前言 JSP 与 PH…

ABAP CLEAR REFRESH FREE 说明(刘欣)

本文仔细测试总结了ABAP中的clear、refresh、free&#xff0c;因为很多时候程序的BUG就是出现在变量没有清理干净&#xff0c;希望整理一个定式出来以后少出BUG。 用clear、refresh、free对带表头的表执行的测试结果如下表&#xff1a; 看起来&#xff0c;最好的避免这些清空命…

Oracle11g安装

参考教程 Oracle11g安装配置详细教程 oracle11g安装步骤详细图文教程 但是这里的用户名如果是以system的话&#xff0c;密码错误 Oracle默认账号密码&#xff1a; &#xff08;1&#xff09;普通用户&#xff1a; SCOTT &#xff08;密码&#xff1a;tiger&#xff09; &…

Day17--购物车页面-商品列表-封装NumberBox

提纲挈领&#xff1a; 官方文档提供了uni-number-box组件 文档内容&#xff1a; 我的操作&#xff1a; 1》修改 my-goods.vue 组件的源代码&#xff0c;在类名为 goods-info-box 的 view 组件内部渲染 NumberBox 组件的基本结构&#xff1a; 2》美化其样式 *****************…

基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、图像复原基本原理✳️ 三、基于多通道LMMSE图像复原法✳️ 3.1 最小均方误差LMMSE插值理论✳️ 3.2 理论公式对应的Matlab关键代码✳️ 四、实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 图像是一种表达信息的…

进程与线程的相爱相杀

✨✨hello&#xff0c;愿意点进来的小伙伴们&#xff0c;你们好呐&#xff01; &#x1f43b;&#x1f43b;系列专栏&#xff1a;【JavaEE初阶】 &#x1f432;&#x1f432;本篇内容&#xff1a;详解进程与线程 &#x1f42f;&#x1f42f;作者简介:一名现大二的三非编程小白&…

Linux文件系统

Linux文件系统 文章目录Linux文件系统1.对文件系统的理解1.1 文件系统当中的缓冲区1.2 文件系统当中的inode1.3 文件属性与文件数据分开存放原理2.对软硬链接的理解扩展&#xff1a;对文件三时间的理解1.对文件系统的理解 1.1 文件系统当中的缓冲区 我们来看看下面这段代码&a…

基于K8s构建Jenkins持续集成平台(部署流程)(转了一点)

转载至&#xff1a;https://blog.csdn.net/m0_59430185/article/details/123394853 一、传统Jenkins的Master-Slave方案的缺陷 Master节点发生单点故障时&#xff0c;整个流程都不可用了 每个 Slave节点的配置环境不一样&#xff0c;来完成不同语言的编译打包等操作&#xff0…

【Uni-App】点击分享,生成海报带二维码,保存到本地图片

目录一&#xff1a;需求二&#xff1a;分析三&#xff1a;准备工作1.qrcode准备2.并且在main.js去挂载四&#xff1a;页面构建1.html2.data3.js一&#xff1a;需求 1.产品需要这个商品&#xff0c;必须分享才有购买资格 2.一共三点&#xff0c;有海报&#xff0c;有二维码&…

k8s安装3节点集群Fate v1.8.0

集群配置信息 3节点配置信息如下图&#xff1a; 当kubefate最新版是1.9.0时&#xff0c;依赖的k8s和ingress-ngnix版本如下&#xff1a; Recommended version of dependent software: Kubernetes: v1.23.5 Ingress-nginx: v1.1.3 升级K8S到1.23.5 参考博客 https://blog.c…

HarmonyOS应用API手势方法-SwipeGesture

描述&#xff1a;用于触发滑动事件&#xff0c;滑动最小速度为100vp/s时识别成功。 Api&#xff1a;从API Version 8开始支持 接口&#xff1a;SwipeGesture(value?: { fingers?: number; direction?: SwipeDirection; speed?: number }) 参数&#xff1a; SwipeDirecti…

代码随想录刷题记录 day32无重叠区间 划分字母区间 合并区间

代码随想录刷题记录 day32无重叠区间 划分字母区间 合并区间 435. 无重叠区间 思想 其实要换个角度想&#xff0c;存放下尽可能多的区间&#xff0c;就是移除的最少的区间。可以按照左右边界进行排序。 1.如果按照右边界进行排序&#xff0c;从左往右遍历&#xff0c;选择右…

数字化门店转型| 舞蹈室管理系统| 门店小程序开发教程

很多拥有跳舞天赋的孩子从小家长就送到专业的舞蹈培训机构进行训练&#xff0c;即使成年也可以学&#xff0c;近些年来各种偶像节目繁多&#xff0c;也使得舞蹈行业市场规模增加&#xff0c;同时各个城市的舞蹈工作室也在逐年增加&#xff0c;线上各种宣传信息也比较多。 同时&…

【重磅】2022年CCF推荐期刊目录 (拟定版) 已发布~

重磅&#xff01;CCF推荐国际学术会议和期刊目录-2022(拟定版)已发布&#xff0c;一起看看有哪些新调整吧&#xff1a; MICCAI 首次被收录&#xff0c;空降B类会议&#xff1b; PRCV 首次被收录&#xff0c;空降C类会议&#xff1b; NAACL 从C类升级到B类会议&#xff1b; …

java语言【#87. 矩形的面积与周长】(已通过)

题目描述 ​ 对于一个给定长和宽的矩形&#xff0c;输出它的周长和面积。 输入 ​ 一行两个小数 a 和 b 表示矩形的长和宽。&#xff08;0.0≤a,b≤100.0&#xff09; 输出 ​ 第一行是矩形的周长 ​ 第二行是矩形的面积 ​ 结果保留两位小数 样例输入 3.1 4.1样例输出 1…

源码决定Offer薪资?这份阿里爆火“Spring源码高级手册” 成功跳槽涨薪19K

就在上周我上一家的同事兼好友去面试 Java 后端岗&#xff0c;一面过了&#xff0c;二面之后就没消息了&#xff0c;他跟我说二面问了一大堆关于Spring等框架源码底层的问题 为什么说掌握源码决定Offer薪资&#xff1f; 和大多数人一样&#xff0c;我这位好友毕业的时候很单纯…

[附源码]JAVA毕业设计火炬中学校刊在线投稿审稿系统(系统+LW)

[附源码]JAVA毕业设计火炬中学校刊在线投稿审稿系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;…

sonarqube个人记事本

Sonarqube安装路径 [rootshqywxtap02 sonar]# pwd /opt/sonar 查看状态 ps -ef | grep sonar bin目录中启停 ./bin/linux-x86-64/sonar.sh start ./bin/linux-x86-64/sonar.sh stop conf配置文件 添加以下参数&#xff1a; sonar.jdbc.usernamesonar sonar.jdbc.passwo…

vex-table根据时间加载列(动态加载),动态计算显示最后一行

vex-table根据时间加载列&#xff08;动态加载&#xff09;&#xff0c;动态计算显示最后一行 效果 div部分 <vxe-tableref"xTable"bordershow-footershow-overflow:loading"loading":data"partData":column-config"{ resizable: false…