Jetpack架构组件_2. 数据绑定库

2024-05-28 15:36

本文主要是介绍Jetpack架构组件_2. 数据绑定库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.理论基础

        数据绑定库是一个支持库,可让您使用声明性格式(而不是以程序化方式)将布局中的界面组件绑定到应用中的数据源。

        布局通常使用调用界面框架方法的代码在 activity 中定义。例如,以下代码会调用 findViewById() 来查找 TextView widget 并将其绑定到 viewModel 变量的 userName 属性:        

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

         以下示例展示了如何使用数据绑定库直接在布局文件中将文本分配给 widget。这样便无需调用上述任何 Java 代码。请注意在赋值表达式中使用 @{} 语法:

<TextViewandroid:text="@{viewmodel.userName}" />

        这样做的好处英文原文如下:

        Binding components in the layout file lets you remove many UI framework calls in your activities, making them simpler and easier to maintain. This can also improve your app's performance and help prevent memory leaks and null pointer exceptions. 

2.代码实现步骤

step1

        app模块中的build.gradle配置databinding。

    dataBinding{enabled=true}

step2

        把XML布局文件转换为DataBinding可以识别和绑定的布局文件。

        选中根节点LinearLayout,按Alt+Enter弹出快捷菜单Convert to data binding layout。

         LinearLayout布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"></LinearLayout>

         转换后布局文件:增加了<layout>包裹。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data></data><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"></LinearLayout>
</layout>

step3

        实例化布局文件对象,xml布局转成类对象。

        activity_main对应的布局文件对象的命名采用了大驼峰命名ActivityMainBinding。使用ActivityMainBingding对象就可以操控UI控件。

step4

        在activity_main.xml布局文件声明变量

         创建User类,并在布局文件中的data标签底下声明这个User类型的变量。

public class User {public String userName;public String password;}
    <data><variablename="user"type="com.wellsun.onewaydatabinding.User" /></data>

step5

        在组件中使用变量

        @{变量},这样就完成了数据源和UI控件的绑定,数据源值变,UI控件的值变。

        <EditTextandroid:text="@{user.userName}"android:layout_margin="20dp"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名" />

 step6

        给ActivityMainBinding赋值,默认是空值。

        方式1: 

        activityMainBinding.setUser(user); 

        方式2:  

        activityMainBinding.setVariable(BR.user,user); 

3.示例代码

        整体布局文件和Activity如下代码: 

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.gaoting.onewaydatabinding.User" /><variablename="goods"type="com.gaoting.onewaydatabinding.Goods" /><variablename="Alia"type="String" /></data><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:text="@{user.userName}"android:layout_margin="20dp"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名" /><EditTextandroid:text="@{user.password}"android:layout_margin="20dp"android:id="@+id/edtPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码" /><TextViewandroid:text="@{Alia}"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:text="@{goods.goodsName}"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:layout_margin="20dp"android:id="@+id/btChangeUser"android:text="改变用户名为gao,密码为123"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><Buttonandroid:layout_margin="20dp"android:id="@+id/btResume"android:text="恢复为初始用户名和密码"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button></LinearLayout>
</layout>

 UI控件

         MainActivity.java

package com.gaoting.onewaydatabinding;import android.os.Bundle;
import android.view.View;
import android.widget.EditText;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.databinding.DataBindingUtil;import com.gaoting.onewaydatabinding.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {ActivityMainBinding activityMainBinding;User user;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);//从值到UI的一个映射(单向绑定,数据员与UI控件)user = new User();user.userName = "gaoting";user.password="123456";activityMainBinding.setUser(user);activityMainBinding.btChangeUser.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {user.userName="gao";user.password = "123";activityMainBinding.setVariable(BR.user,user);}});activityMainBinding.btResume.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {user.userName="gaoting";user.password = "123456";activityMainBinding.setUser(user);}});activityMainBinding.setAlia("John");Goods goods = new Goods();goods.goodsName="夹克衫";activityMainBinding.setGoods(goods);}
}

这篇关于Jetpack架构组件_2. 数据绑定库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010968

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解