Android DataBinding 初探

Android 安卓DataBinding(十)·include中使用 在include中使用首先写出layout布局:include_layout.xml 阅读详情

做为一个 Android 开发者,期间很多人在网上分享了很多经验,从中得到了很多帮助,觉得大家都很有分享精神,于是今天开始决定开始写博客,和大家一起分享一些平时用到的知识,更多的是想有一个学习过程的总结,好,开始今天的主题,现在大家在项目的实际开发中很多用到了 MVVM 的开发模式,而说到 MVVM 就不得不提 DataBinding,DataBinding 是谷歌在 2015 年 I/O 大会上介绍的一个数据绑定框架,是实现 MVVM 模式的一个工具,省去了我们原来的 findViewById 去绑定控件,下面来看如何在应用中引入 DataBinding

构建环境

配置你的应用程序使用数据绑定,在应用程序模块 (app module) 的 build.gradle 文件添加数据绑定元素,需要注意的是 Android Studio 的版本需要在 1.3 以上

android {
    dataBinding {
        enabled = true
    }
}
 
接下来看数据绑定的布局文件
<?xml version="1.0" encoding="utf-8"?>

<!--现在的根节点-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="user"
            type="com.example.qiudengjiao.databindingtext.User" />
    </data>

    <!--原来的根节点-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@{user.userName}"
            android:textSize="30dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.userAccount}" />
    </LinearLayout>
</layout>
和原来我们的布局相比增加了最外层的 layout 根节点,而不是原来的 ViewGroup 根节点,其他的就是增加了 data 和 variable 节点,剩下的基本和我们原来所写的布局文件基本一样,我们来具体分析一下
<data>
     <variable
            name="user"
            type="com.example.qiudengjiao.databindingtext.User" />      
</data>

在 data 节点中声明了一个 user 变量,数据中的 User 变量描述此布局中可能使用的属性,其中 type 属性就是在 java 中定义的 User 类,这里需要注意的是必须把类的完全包名路径写上

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:text="@{user.userName}" />
布局中的表达式使用“@{ }”语法在属性中写入,在这里,TextView 的文本设置为用户 userName 属性
数据对象
/**
 * java bean
 */

public class User {

    private String userName;
    private String userAccount;

    public User(String userName, String userAccount) {
        this.userName = userName;
        this.userAccount = userAccount;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAccount() {
        return userAccount;
    }

    public void setUserAccount(String userAccount) {
        this.userAccount = userAccount;
    }
}
数据绑定
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("Text","User");
        binding.setUser(user);
    }
}

这里把原来的 setContentView() 用 DataBindingUtil.setContentView() 替换,注意到生成的 binding 对象 ActivityMainBinding和布局文件的名字是一致的,也就是说如果布局文件的的名称是 activity_mian.xml, 则生成的类就是 ActivityMainBinding,然后创建一个User 对象,通过 setUser() 与 variable 进行绑定,这里需要注意的是 ActivityMainBinding 是自动生成的,所有的 set 方法也是根据variable 名称生成的,数据与 variable 绑定之后,xml 的 UI 元素就可以直接使用了,到这里数据的绑定就算完成了,但是我们在实际项目中往往还需要命令绑定,接下来我们看一下命令的绑定
命令绑定
我们接着在刚才代码的基础上去写
<?xml version="1.0" encoding="utf-8"?>

<!--现在的根节点-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="user"
            type="com.example.qiudengjiao.databindingtext.User" />

        <variable
            name="presenter"
            type="com.example.qiudengjiao.databindingtext.Presenter" />
    </data>

    <!--原来的根节点-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{presenter.onClickCommand}"
            android:text="@{user.userName}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.userAccount}" />
    </LinearLayout>
</layout>
然后再创建一个 Presenter 类,这里我们定义了一个点击事件响应的方法
public class Presenter {

    public void onClickCommand(View view) {
        Toast.makeText(view.getContext(), "点我了", Toast.LENGTH_SHORT).show();
    }
}

从上面的 xml 文件以及 Presenter 类结合上面的数据绑定,想必我们也能看出规律了,就是在 data 节点下新增一个 variable 节点,并且和Presenter 类进行绑定,需要注意的是 Presenter 里面的方法需要写 View 参数,最后别忘了在 MainActivity 中初始化 Presenter 类
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("Text","User");
        Presenter presenter = new Presenter();
        binding.setPresenter(presenter);
        binding.setUser(user);
    }
}
这样点击事件就绑定成功了,这样我们就完成了数据和点击事件的绑定,这里只做基本介绍,如果大家想更加深入的了解 Data 相关的知识可以点击DataBinding,这是 AndroidDataBinding 的官方网站,这里只做入门简单介绍,另外还有自我翻译的和前面推荐官方网站相对应的详解,请点击 Android DataBinding 详解
安卓入门十五 常用功能模块一DataBinding 在 ViewModel 中使用了 LiveData 后 , 必须调用 LiveData#observe 函数 为 LiveData 设置 androidx.lifecycle.Observer 监听器 , 如果 监听到了 LiveData 数据变化 , 直接 回调 监听器的 androidx.lifecycle.Observer#onChanged 函数 , 在该回调函数中执行 更新视图 操作;为 Button 组件设置点击事件时 , 如果要 调用配置的 ViewModel 对象的函数 , 需要使用。 阅读详情

相关推荐

手把手教你用MATLAB和PSIM搞定Buck电路控制器:从传递函数到运放电路实战

本文详细介绍了如何使用MATLAB和PSIM协同设计Buck电路控制器,从传递函数推导到运放电路实现的完整流程。通过小信号建模、波特图分析和双平台仿真验证,帮助电力电子工程师解决理论到实践的转化难题,提升Buck电路控制器设计的效率和可靠性。

weixin_29271053的博客 269

android——databinding中字符串的拼接处理、TextView显示的值随activity的属性值改变同时改变--LiveData、双向绑定过滤器、监听某个值的改变

简介 使用的技术是观察者与被观察者的模式,在google推荐的案例中也有使用到,现在我把它封装成一个扩展函数,使得使用更加简单明了 代码 MainActivity class MainActivity : AppCompatActivity() { private val mutableLiveData = MutableLiveData<String>() override fun onCreate(savedInstanceState: Bundle?) {

wy313622821的博客 4615

汇编语言(第4版)王爽 课程设计2 详细实现(一、虚拟模式DOS运行篇)

由于虚拟模式的限制,我们编写的许多逻辑暂时不能被检验,而因为《汇编语言》编写时间较早,其所依赖的运行环境如今只能够依靠虚拟机来搭建。比如实模式DOS,搭建步骤比较繁琐,因此我将其它的部分放在下一篇文章中进行讲解。事实上,我们实现的程序属于《汇编语言》课程设计2中任务程序部分,其中的完整任务还涉及到将该任务程序安装到软盘等操作,这些也都需要在实模式下才能运行,所以统一放到下一篇文章进行实现。

m0_73327328的博客 2824

Android DataBinding 字符串拼接

对于字符串拼接 总是忘记如何实现,特此记录。 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"><data> <variable name="bean" type="com.ethanco.threa

朱豪凯的博客 1万+

GD32F4x芯片加密实战:从读保护到安全启动全解析

本文详细解析了GD32F4x芯片加密的实战操作,从读保护功能到安全启动全流程。通过具体代码示例和应用场景分析,帮助开发者有效防止固件被盗用,提升工业控制、智能门锁等场景下的数据安全性。重点介绍了读保护功能的底层机制、配置步骤及常见问题解决方案。

weixin_42629671的博客 207

Notion卡顿救星:3分钟搞定DNS优化,手机电脑全平台加速指南

本文针对Notion访问慢和卡顿问题,提供了全平台DNS优化与Hosts文件修改的详细指南。通过更换优质DNS服务器或建立静态IP映射,可有效解决因网络延迟和域名解析导致的加载缓慢,实现手机与电脑端的快速加速,提升Notion使用流畅度。

v6b7n8m9q0的博客 1306

dataBinding中TextView中字符串的拼接处理

databinding使用string format <string name="Generic_Text">My Name is %s</string> android:text= "@{@string/Generic_Text(Profile.name)}" 多个字符串拼接的: <string name="generic_name">字符串1: %1$s,字符串2:%2$s</string> android:text= "@{@string/g

qq_40638618的博客 3337

STK新手必看:用700km轨道卫星,5步搞定对地覆盖分析报告

本文为STK新手提供700km轨道卫星对地覆盖分析的5步实操指南,涵盖卫星创建、传感器配置、区域定义、计算设置及报告生成全流程,特别标注常见操作误区与优化技巧,帮助用户快速掌握STK覆盖性分析核心方法。

weixin_42546392的博客 375

Android DataBinding 使用指南

本内容主要介绍如何使用 Android 架构组件中的 Data Binding。

步入人工智能 2216

从选型到阵列:基于ESP32-S3的智能硬件麦克风系统设计实战

本文详细介绍了基于ESP32-S3芯片设计智能硬件麦克风阵列的完整实战方案。从核心芯片选型、数字MEMS麦克风的参数解读与电路设计,到关键的声学结构密封、阵列布局策略,再到利用ESP-ADF框架构建音频处理流水线并集成回声消除、噪声抑制等算法,提供了从硬件到软件的全链路设计指南与避坑要点,旨在实现清晰、稳定的远场语音交互。

weixin_29173777的博客 266

【实战】YOLOv5/v8模型→RK3588 NPU高效部署:模型转换/量化/精度调优完整指南​

摘要: 本教程详细介绍了YOLOv5模型在RK3588 NPU上的优化部署流程,重点解析了架构转换与量化技术。通过将检测头输出结构与decode操作分离,显著提升了模型在NPU上的兼容性和计算效率。LetterBox预处理方案有效保持图像宽高比,相比直接resize提升检测精度。INT8量化技术采用非对称量化策略,通过scale和zero_point参数实现浮点到整数的转换,在保证精度的同时大幅提升推理速度。实验表明,优化后的模型在RK3588上实现了高效的实时目标检测性能,为边缘AI部署提供了完整解决方案

LXY_LOVE36的博客 625

Android databinding xml 字符串拼接

<?xml version="1.0" encoding="utf-8"?> <layout> <data> <variable name="bean" type="x.x.x.ListBean" /> </data> <LinearLayou...

JetoXiao 4577

YOLOv12改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制

这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。

Limiiiing的博客 1509

Android MVVM 初探之 DataBinding 双向绑定

在google 刚推出 DataBinding 时是只支持单向绑定的,也即数据可以显示到 View 上来,而 View 上进行更新却不能同步到 数据上去。现在则可以实现双向绑定。 除数据外,在响应事件上也比原来更加方便,快捷。

刘煜的博客 2721

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android MVVM 初探之 DataBinding 显示数据

MVVM是Model-View-ViewModel的简写。本篇文章主要内容为 Android MVVM实现的基础,也即 android DataBinding 的一般实现。

刘煜的博客 1070

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android-jetpack系列之初探DataBinding

Android-jetpack系列之初探DataBinding1.介绍2.用法1. 开启databinding2. 创建布局并转换为Databinding布局3. 创建实体类并引入4. Activity中设置5. 实现效果 1.介绍 DataBinding是一个用于将数据绑定到应用界面布局文件中view元素的组件,能够避免我们手动重复逻辑,例如findViewById、setText等。 2.用法 1. 开启databinding buildTypes { release {

qq_36050563的博客 249

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android入门 初探Databinding的使用

数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。

sakura的博客 325

Android Data Binding 初探

关于 Data BindingData Binding 是实现 MVVM 开发模式的一种框架。自从遇到了 Data Binding,老实说,我都不太想用 MVP 开发模式了。在 Android 中,要实现 MVP 开发模式,得定义很多 View Interface,还要定义很多 Presenter 类,职责分离了,程序的耦合性也优于 MVC 开发模式,但是开发起来还是略显繁琐。不过哦,MVP 开发模

JohanMan的博客 461

Android 安卓DataBinding(一)·基础

文章目录前言DataBinding介绍开始准备快捷按键实例代码(基本用法)运行效果 前言 今天2019年9月29日,本人优快云博客 称号 博客专家 审核通过了,为了庆祝,特此今天写一篇博客作为纪念! 欢迎扫描左方二维码(群号码:697614838),加入我的优快云粉丝群(请备注好你的专业)! DataBinding介绍 DataBinding 是谷歌官方发布的一个框架,其作用是实现数据绑定(...

两行代码 踏踏实实de工作 1万+

Android 安卓DataBinding(二)·入门

文章目录DataBinding介绍开始准备深入了解 DataBinding在代码中对TextView进行赋值TextView默认值使用class属性 DataBinding介绍 DataBinding 是谷歌官方发布的一个框架,其作用是实现数据绑定(Data binding),同时,也是因为有它,可以在安卓(Android)上实现MVVM架构。关于MVVM架构,请看完 Android 安卓Dat...

两行代码 踏踏实实de工作 9359

Android 安卓DataBinding详解(超详细)

由于这篇文章写来来会很长很长,为避免文章内容混乱,便于理清思路考虑,所以列出了目录。 Android 安卓DataBinding(时刻更新、维护一下文章) Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBindin...

两行代码 踏踏实实de工作 8465

Android 安卓DataBinding(七)·事件绑定

android:afterTextChanged 和 android:onTextChanged 可以用于EditText中整体思路以输入账号密码来进行模拟,模拟使用android:onClick、android:afterTextChanged 和 android:onTextChanged。跟我一起来做!修改Bean类:username 和 password 分别表示账号和密,用final来修饰,如果你不知道为什么我要用final修饰,请看我第四篇文章------

2401_84148974的博客 1221

Android 安卓DataBinding(四)·单向绑定 ObservableField

文章目录前景回顾单向绑定ObservableField运行效果 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable 上一期讲到 BaseObservable 单向绑定,在中间又要写注解,又要加注解,然后还得用 notifyProperty...

两行代码 踏踏实实de工作 2万+

Android 安卓DataBinding(三)·单向绑定 BaseObservable

文章目录前景回顾单向绑定BaseObservableObservableField 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 在上文中讲到,通过DataBinding进行绑定控件以及进行相关操作,但是,这遇到了一个瓶颈,就比如绑定的变量发生变化的时候,每次都要重新向 ViewDataBinding 传值进行更新操作之...

两行代码 踏踏实实de工作 1万+
下一篇: 设计模式之单例模式
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值