当前位置: 首页 > news >正文

Jetpack 中的 databinding - 使用篇

什么叫databinding

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

如何使用

应用模块下 build.gradle 文件中添加 dataBinding 元素,如下

dataBinding {enabled = true
}

单向绑定

activity_list

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.gxx.databinding.data.UserData" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@{user.userName}" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="@{String.valueOf(user.age)}" /></LinearLayout>
</layout>

ListActivity

class ListActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var binding =DataBindingUtil.setContentView<ActivityListBinding>(this, R.layout.activity_list)binding.lifecycleOwner = thisvar userData = UserData()userData.age = 10userData.userName = "你好"binding.user = userData}
}

 UserData

class UserData {var userName: String? = nullvar age: Int = 0
}

可观察的数据对象

任何 plain-old 对象都可用于数据绑定,但修改对象不会自动使界面更新。通过数据绑定,数据对象可在其数据发生更改时通知其他对象,即监听器,可观察类有三种不同类型:对象、字段和集合。当其中一个可观察数据对象绑定到界面并且该数据对象的属性发生更改时,界面会自动更新。

结合 LiveData 将数据变化通知给界面

ViewModelActivity
class ViewModelActivity : AppCompatActivity() {private lateinit var userViewModel: UserViewModeloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val binding = DataBindingUtil.setContentView<ActivityViewmodelBinding>(this,R.layout.activity_viewmodel)binding.lifecycleOwner = thisuserViewModel = ViewModelProvider(this,ViewModelProvider.NewInstanceFactory()).get(UserViewModel::class.java)binding.viewModel = userViewModel}
}

UserViewModel

class UserViewModel : ViewModel() {val userLiveData = MutableLiveData<UserData>()init {thread {for (x in 1..10) {Log.d("TAG", "服务器给你推送消息啦{叮咚声音}$x")val userData = UserData()//userData.userName.set("接收服务器声音$x")userData.userName = "接收服务器声音$x"userLiveData.postValue(userData)Thread.sleep(2000)}}}
}
class UserData : BaseObservable() {val userName: ObservableField<String> by lazy { ObservableField<String>() }var age: Int = 0
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="viewModel"type="com.gxx.databinding.viewmodel.UserViewModel" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@={viewModel.userLiveData.userName}" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@={viewModel.userLiveData.userName}" /></LinearLayout>
</layout>

相关文章:

Jetpack 中的 databinding - 使用篇

什么叫databinding 数据绑定库是一种支持库&#xff0c;借助该库&#xff0c;您可以使用声明性格式&#xff08;而非程序化地&#xff09;将布局中的界面组件绑定到应用中的数据源。使用数据绑定可以简化 findViewById 。 如何使用 应用模块下 build.gradle 文件中添加 data…...

C++之signal信号应用实例(一百七十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

【数据分析入门】Numpy进阶

目录 一、数据重塑1.1 透视1.2 透视表1.3 堆栈/反堆栈1.3 融合 二、迭代三、高级索引3.1 基础选择3.2 通过isin选择3.3 通过Where选择3.4 通过Query选择3.5 设置/取消索引3.6 重置索引3.6.1 前向填充3.6.2 后向填充 3.7 多重索引 四、重复数据五、数据分组5.1 聚合5.2 转换 六、…...

数据结构的图存储结构

目录 数据结构的图存储结构 图存储结构基本常识 弧头和弧尾 入度和出度 (V1,V2) 和 的区别,v2> 集合 VR 的含义 路径和回路 权和网的含义 图存储结构的分类 什么是连通图&#xff0c;&#xff08;强&#xff09;连通图详解 强连通图 什么是生成树&#xff0c;生…...

爬虫IP时效问题:优化爬虫IP使用效果实用技巧

目录 1. 使用稳定的代理IP服务提供商&#xff1a; 2. 定期检测代理IP的可用性&#xff1a; 3. 配置合理的代理IP切换策略&#xff1a; 4. 使用代理IP池&#xff1a; 5. 考虑代理IP的地理位置和速度&#xff1a; 6. 设置合理的请求间隔和并发量&#xff1a; 总结 在爬虫过…...

【uniapp】picker mode=“region“ 最简单的省市区 三级联动

省市区 picker template <picker mode"region" :value"date" class"u-w-440" change"bindTimeChange"><u--inputborder"bottom"class"u-fb u-f-s-28"placeholder"请选择省市区"type"te…...

解决Java中的“Unchecked cast: java.lang.Object to java.util.List”问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

我的创作纪念日(128天)

机缘 CSDN账号创建已有3年了&#xff0c;本篇是第一篇纪念文。。。有点偷懒的感觉了。。。 从第一篇文章的发布&#xff0c;到现在已经过了128天了&#xff0c;回想起当时发布文章的原因&#xff0c;仅仅只是因为找不到合适的云笔记&#xff0c;鬼使神差的想到了CSDN&#xff…...

30W IP网络有源音箱 校园广播音箱

SV-7042XT是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率30W。同时它可以外接一个30W的无源副音箱&#xff0c;用在面积较大的场所。5寸进口全频低音…...

什么是DNS服务器的层次化和分布式?

DNS (Domain Name System) 的结构是层次化的&#xff0c;意味着它是由多个级别的服务器组成&#xff0c;每个级别负责不同的部分。以下是 DNS 结构的层次&#xff1a; 根域服务器&#xff08;Root Servers&#xff09;&#xff1a; 这是 DNS 层次结构的最高级别。全球有13组根域…...

Django图书商城系统实战开发-部署上线操作

Django图书商城系统实战开发-打包部署 技术背景掌握 当你需要在服务器上部署Web应用程序时&#xff0c;Nginx是一个强大且常用的选择。Nginx是一个高性能的Web服务器和反向代理服务器&#xff0c;它可以处理大量的并发连接&#xff0c;并提供负载均衡、缓存、SSL等功能。下面…...

Springboot 实践(1)MyEclipse2019创建maven工程

项目讲解步骤&#xff0c;基于本机已经正确安装Java 1.8.0及MyEclipse2019的基础之上&#xff0c;Java及MyEclipse的安装&#xff0c;请参考其他相关文档&#xff0c;Springboot 实践文稿不再赘述。项目创建讲解马上开始。 一、首先打开MyEclipse2019&#xff0c;进入工作空间选…...

41 | 京东商家书籍评论数据分析

京东作为中国领先的电子商务平台,积累了大量商品评论数据,这些数据蕴含了丰富的信息。通过文本数据分析,我们可以了解用户对产品的态度、评价的关键词、消费者的需求等,从而有助于商家优化产品和服务,以及消费者作出更明智的购买决策。 本文将详细阐述如何获取京东商家评…...

【数据挖掘】如何保证数据一致性?

一、说明 我曾经在网络分析服务公司担任数据分析师。此类系统可帮助网站收集和分析客户行为数据。 不言而喻&#xff0c;数据是网络分析服务最宝贵的价值。我的主要目标之一是监控数据质量。 为了确保数据一切正常&#xff0c;我们需要关注两件事&#xff1a; 没有丢失或重复的…...

深度学习AIGC问答

文章目录 **.pt 和 .pth 文件区别**.pkl 和 .pth 区别深度学习中.ckpt .h5 文件的区别深度学习中.ckpt .pth 文件的区别TensorFlow框架和keras框架的区别、和关系 Pytorch模型 .pt, .pth的存加载方式 pytorch解析.pth模型文件 .pt 和 .pth 文件区别 在深度学习中&#xff0c;.…...

大数据第二阶段测试(二)

1.接到需求之后的开发流程是什么&#xff1f; 参考答案一 接到需求后的开发流程一般包括需求分析、设计、编码、测试和部署等步骤。首先&#xff0c;对需求进行全面的分析&#xff0c;明确需求的背景、目标和功能。然后&#xff0c;根据需求进行系统设计&#xff0c;包括数据库…...

【mysql报错解决】MySql.Data.MySqlClient.MySqlException (0x80004005)或1366

场景&#xff1a;c#使用mysql数据库执行数据库迁移&#xff0c;使用了新增inserter的语句&#xff0c;然后报错 报错如下&#xff1a; 1.MySql.Data.MySqlClient.MySqlException (0x80004005): Incorrect string value: ‘\xE6\x9B\xB4\xE6\x94\xB9…’ for column ‘Migratio…...

Kafka-eagle监控平台

Kafka-Eagle简介 在开发工作中&#xff0c;当业务不复杂时&#xff0c;可以使用Kafka命令来进行一些集群的管理工作。但如果业务变得复杂&#xff0c;例如&#xff1a;需要增加group、topic分区&#xff0c;此时&#xff0c;再使用命令行就感觉很不方便&#xff0c;此时&#x…...

ubuntu16.04制作本地apt源离线安装

一、首先在有外网的服务器安装需要安装的软件&#xff0c;打包deb软件。 cd /var/cache/apt zip -r archives.zip archives sz archives.zip 二、在无外网服务器上传deb包&#xff0c;并配置apt源。 1、上传deb包安装lrzsz、unzip 用ftp软件连接无外网服务器协议选择sftp…...

【Leetcode】91.解码方法

一、题目 1、题目描述 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : A -> "1" B -> "2" ... Z -> "26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" …...

基于Agent Deck构建多智能体系统:从原理到工程实践

1. 项目概述&#xff1a;从“Agent Deck”看智能体协作平台的构建最近在GitHub上看到一个挺有意思的项目&#xff0c;叫asheshgoplani/agent-deck。光看这个名字&#xff0c;你可能会联想到一副“牌”&#xff0c;或者一个“控制台”。没错&#xff0c;这个项目的核心思想&…...

ESP32-S3 UF2 Bootloader修复指南:从原理到实战救砖

1. 项目概述&#xff1a;为什么ESP32-S3需要UF2 Bootloader&#xff1f;如果你玩过树莓派Pico或者一些Adafruit的开发板&#xff0c;可能会对那个插上USB后出现的U盘盘符有印象——直接把一个.uf2文件拖进去&#xff0c;固件就更新好了&#xff0c;简单得不像在搞嵌入式开发。这…...

西安小程序制作优质服务推荐

在西安&#xff0c;小程序制作已成为众多企业实现数字化转型的核心一步。企业在这个领域的选择尤为重要&#xff0c;因为市场上的服务供应商数量庞大、难以判断其服务质量。因此专业背景、以往案例以及客户评价&#xff0c;这些都能够反映出公司的整体实力。还有&#xff0c;成…...

5.【Python】Python3 运算符

第一步&#xff1a;分析与整理 运算符1. 什么是运算符&#xff1f; 运算符用于执行算术、比较、逻辑等操作。操作数是参与运算的值。例如 4 5 9 中&#xff0c;4 和 5 是操作数&#xff0c; 是运算符。 Python 支持以下运算符类型&#xff1a; 算术运算符比较&#xff08;关系…...

Mzmine 4.4.3 安装教程

软件介绍MZmine是一款开源的质谱数据处理平台&#xff0c;主要用于液相色谱-质谱&#xff08;LC-MS&#xff09;等数据的分析&#xff0c;其核心功能包括原始数据导入、色谱峰检测与去卷积、跨样品峰对齐、化合物识别&#xff08;通过与数据库比对&#xff09;以及结果可视化&a…...

终极CoreCycler教程:5分钟掌握CPU超频稳定性测试

终极CoreCycler教程&#xff1a;5分钟掌握CPU超频稳定性测试 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/gh_mi…...

【最新 v2.7.5 版本安装包】OpenClaw 零基础部署秘籍,无需命令零代码一键安装轻松搞定

&#x1f680; OpenClaw 一键安装包&#xff5c;一键部署甩掉复杂环境配置 &#x1f4cc; 适配信息 适配系统&#xff1a;Windows10/11 64 位 当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09; ✨ 核心优势 全程可视化操作&#xff0c;不用命令行、不用手动配置…...

ESP32 ADC采样率上不去?实测DMA模式下的真实性能与避坑指南

ESP32 ADC DMA模式性能深度优化&#xff1a;突破2MSPS采样率的关键策略 在物联网边缘计算领域&#xff0c;ESP32凭借其出色的性价比和丰富的外设资源&#xff0c;已成为众多高速数据采集项目的首选方案。当开发者尝试将ESP32的ADC采样率推向理论极限时&#xff0c;往往会遭遇现…...

2025终极免费IDM激活方案:一键永久解锁下载管理神器

2025终极免费IDM激活方案&#xff1a;一键永久解锁下载管理神器 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager&#xff08;ID…...

终极指南:如何在Windows电脑上免费预览iPhone的HEIC照片

终极指南&#xff1a;如何在Windows电脑上免费预览iPhone的HEIC照片 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否经常遇…...