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

DataBinding的基本使用

目录

  • 一、MVC、MVP和MVVM框架的使用场景
  • 二、Java使用

一、MVC、MVP和MVVM框架的使用场景

  • MVC: 适用于小型项目,够灵活,
    缺点:Activity不仅要做View的事情还要做控制和模型的处理,导致Activity太过臃肿,管理混乱,没有单一职责,耦合度、扩展性都不太好

  • MVP:适用于大型项目、业务很重、项目很大,必须分层清楚,因为开发的人太好
    优点:分层特别清晰
    缺点:出现接口过多、接口地狱问题

  • MVVM: 适用于界面更新很频繁,比如网易云音乐、腾讯视频
    DataBinding 是一个工具集,不属于哪个框架,在MVVM框架中用于完成View层与ViewModel层的双向绑定
    大部分情况下,MVVM框架都会使用DataBinding;小部分情况下,MVP框架也可以使用

新的开发模块:数据驱动开发(DataBinding + ViewModel + LiveData)

特别注意:MVVM模式下的ViewModel(VM)和 Jetpack的ViewModel 不是同一东西,MVVM中的ViewModel是层次结构,而Jetpack的ViewModel是组件库。

永远没有哪个模式最好,只有哪个模式适合你的项目才是最好的

二、Java使用

activity_main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- layout是DataBinding管理了 我们整个布局 -->
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"><data><!-- 这里面type写全路径 不是用于反射 --><variablename="user"type="com.example.mydatabinding.model.User"></variable></data><!-- 上面的是DataBinding 内部用的,注意:Android View体系不认识--><!-- Android View体系的 下面的所有内容 会给Android绘制 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- @=表示 View -> Model 数据传输(一向) --><EditTextandroid:id="@+id/et1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="Hello World!"android:text="@={user.name}"android:textSize="50sp"/><EditTextandroid:id="@+id/et2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="Hello World!"android:text="@={user.pwd}"android:textSize="50sp"/></LinearLayout>
</layout>

编译之后会生成两个布局文件

  1. app/build/intermediates/data_binding_layout_info_type_merge/debug/out/ 目录下生成 activity_main-layout.xml文件
    activity_main-layout.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Layout directory="layout" filePath="app\src\main\res\layout\activity_main.xml"isBindingData="true" isMerge="false" layout="activity_main"modulePackage="com.example.mydatabinding" rootNodeType="android.widget.LinearLayout"><Variables name="user" declared="true" type="com.example.mydatabinding.model.User"><location endLine="10" endOffset="18" startLine="7" startOffset="8" /></Variables><Targets><Target tag="layout/activity_main_0" view="LinearLayout"><Expressions /><location endLine="42" endOffset="18" startLine="18" startOffset="4" /></Target><Target id="@+id/et1" tag="binding_1" view="EditText"><Expressions><Expression attribute="android:text" text="user.name"><Location endLine="29" endOffset="39" startLine="29" startOffset="12" /><TwoWay>true</TwoWay><ValueLocation endLine="29" endOffset="37" startLine="29" startOffset="29" /></Expression></Expressions><location endLine="31" endOffset="13" startLine="24" startOffset="8" /></Target><Target id="@+id/et2" tag="binding_2" view="EditText"><Expressions><Expression attribute="android:text" text="user.pwd"><Location endLine="38" endOffset="38" startLine="38" startOffset="12" /><TwoWay>true</TwoWay><ValueLocation endLine="38" endOffset="36" startLine="38" startOffset="29" /></Expression></Expressions><location endLine="40" endOffset="13" startLine="33" startOffset="8" /></Target></Targets>
</Layout>

这个xml文件就相当于activity_main.xml布局文件中的这一截里面的内容
2. 在 app/build/intermediates/incremental/mergeDebugResources/stripped.dir/layout/ 目录下生成 activity_main.xml文件,这个xml就相当于原activity_main.xml布局文件中的这一截里面的内容
activity_main.xml

<?xml version="1.0" encoding="utf-8"?><!-- layout是DataBinding管理了 我们整个布局 --><!-- 上面的是DataBinding 内部用的,注意:Android View体系不认识--><!-- Android View体系的 下面的所有内容 会给Android绘制 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:tag="layout/activity_main_0"><!-- @=表示 View -> Model 数据传输(一向) --><EditTextandroid:id="@+id/et1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="Hello World!"android:tag="binding_1"android:textSize="50sp" /><EditTextandroid:id="@+id/et2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="Hello World!"android:tag="binding_2"android:textSize="50sp" /></LinearLayout>

相关文章:

DataBinding的基本使用

目录 一、MVC、MVP和MVVM框架的使用场景二、Java使用 一、MVC、MVP和MVVM框架的使用场景 MVC&#xff1a; 适用于小型项目&#xff0c;够灵活&#xff0c; 缺点&#xff1a;Activity不仅要做View的事情还要做控制和模型的处理&#xff0c;导致Activity太过臃肿&#xff0c;管理…...

eslint和prettier格式化冲突

下载插件 ESLint 和 Prettier ESLint 进入setting.json中 setting.json中配置 {"editor.tabSize": 2,"editor.linkedEditing": true,"security.workspace.trust.untrustedFiles": "open","git.autofetch": true,"…...

matlab使用教程(26)—常微分方程的求解

1.求解非刚性 ODE 本页包含两个使用 ode45 来求解非刚性常微分方程的示例。MATLAB 提供几个非刚性 ODE 求解器。 • ode45 • ode23 • ode78 • ode89 • ode113 对于大多数非刚性问题&#xff0c;ode45 的性能最佳。但对于允许较宽松的误差容限或刚度适中的问题&…...

尚硅谷宋红康MySQL笔记 14-18

是记录&#xff0c;不会太详细&#xff0c;受本人知识限制会有错误&#xff0c;会有个人的理解在里面 第14章 视图 了解一下&#xff0c;数据库的常见对象 对象描述表(TABLE)表是存储数据的逻辑单元&#xff0c;以行和列的形式存在&#xff0c;列就是字段&#xff0c;行就是记…...

香港全新的虚拟资产服务商发牌制度

香港证监会2023年2月20日通告&#xff0c;原有虛擬資產交易平台如要符合資格參與當作為獲發牌的安排&#xff0c;必須在2023 年6 月1 日至2024 年2 月29 日期間(即由2023 年6 月1 日37起計九個月內)內&#xff0c;根據《打擊洗錢條例》下的虛擬資產服務提供者制度在網上提交完全…...

C# 泛型

目录 一、前言 二、相关内容 1、什么是泛型&#xff1f; 2、泛型类 3、泛型方法 4、限定类型参数 4.1、 类型参数的基本约束 4.2、接口约束 4.3、基类约束 4.5、泛型参数与限定类型参数的关系 4.6、自定义约束 5、使用泛型的好处 5.1、代码复用性 5.2、类型安全…...

servlet,Filter,责任的设计模式,静态代理

servlet servlet是前端和数据库交互的一个桥梁 静态网页资源的技术&#xff1a;在前端整个运行的过程中 我们的网页代码不发生改变的这种情况就称为静态的网页资源技术动态网页资源的技术&#xff1a;在前端运行的过程中 我们的前端页面代码会发生改变的这种情况就称为 动态的网…...

C++中的运算符总结(5):按位运算符(上)

C中的运算符总结&#xff08;5&#xff09;&#xff1a;按位运算符&#xff08;上&#xff09; 9、按位运算符 NOT&#xff08; &#xff5e;&#xff09;、 AND&#xff08; &&#xff09;、 OR&#xff08; |&#xff09;和 XOR&#xff08; ^&#xff09; 逻辑运算符和…...

8.Oracle中多表连接查询方式

表连接分类&#xff1a; 内连接、外连接、交叉连接、自连接 1 内连接 内连接是一种常见的多表关联查询方式&#xff0c;一般使用关键字INNER JOIN来实现。其中&#xff0c;INNER关键字可以省略&#xff0c;当只使用JOIN关键字时&#xff0c;语句只表示内连接操作。在使用内连…...

Linux 安装mysql(ARM架构)

添加mysql用户组和mysql用户 安装依赖libaio yum install -y libaio* 下载Mysql wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz安装mysql 解压Mysql tar xvf mysql-5.7.27-aarch64.tar.gz -C /usr/local/ 重命名 …...

git:git clone报错提示permissions xxxx for xxxxxx are too open

问题&#xff1a; 如题 参考&#xff1a; [密钥权限过大错误]ssh “permissions are too open” error 解决办法&#xff1a; 将id_rsa和id_rsa.pub的权限改为600...

elasticSearch数据的导入和导出

http://wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.gz 解压即可&#xff1a; 1、将索引中的数据导出到本地 myindex 是我的索引 elasticdump --inputhttp://localhost:9200/myindex--output/home/date/myindex.json2、将本地数据导入es中 elasticdum…...

DDR PHY

1.ddr phy架构 1.pub&#xff08;phy unility block&#xff09; 支持特性&#xff1a; &#xff08;1&#xff09;不支持SDRAM的DLL off mode &#xff08;2&#xff09;数据位宽是以8bit逐渐递增的&#xff08;这样做的目的是因为可能支持16/32/64bit的总线位宽&#xff…...

XSS攻击是怎么回事?记录一下

title: XSS攻击 date: 2023-08-27 19:15:57 tags: [XSS, 网络安全] categories: 网络安全 今天学习了一个网络攻击的手段&#xff0c;XSS攻击技术&#xff0c;大家自建网站的朋友&#xff0c;记得看看是否有此漏洞。 &#x1f388; XSS 攻击 全称跨站脚本攻击 Cross Site Sc…...

FFmpeg支持多线程编码并保存mp4文件示例

之前介绍的示例&#xff1a; (1).https://blog.csdn.net/fengbingchun/article/details/132129988 中对编码后数据保存成mp4 (2).https://blog.csdn.net/fengbingchun/article/details/132128885 中通过AVIOContext实现从内存读取数据 (3).https://blog.csdn.net/fengbingchun/…...

一文搞懂深度信念网络!DBN概念介绍与Pytorch实战

目录 一、概述1.1 深度信念网络的概述1.2 深度信念网络与其他深度学习模型的比较结构层次学习方式训练和优化应用领域 1.3 应用领域图像识别与处理自然语言处理推荐系统语音识别无监督学习与异常检测药物发现与生物信息学 二、结构2.1 受限玻尔兹曼机&#xff08;RBM&#xff0…...

MyBatis:使用注解让数据库操作更简单

目录 一、简介 二、配置 三、基于注解的基本使用 四、测试 总结 一、简介 在Java开发中&#xff0c;数据库操作是一个常见而重要的任务。为了方便地执行SQL语句&#xff0c;获取结果集&#xff0c;处理异常等&#xff0c;我们通常需要使用JDBC&#xff08;Java Database …...

基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…...

4.网络设计与redis、memcached、nginx组件(一)

网络组件系列文章目录 第四章 网络设计与redis、memcached、nginx组件 文章目录 网络组件系列文章目录文章的思维导图前言一、网络相关的问题&#xff0c;网络开发中要处理那些问题&#xff1f;网络操作IO连接建立连接断开消息到达消息发送网络操作IO特性 二、网络中IO检测IO函…...

leetcode分类刷题:矩阵顺时针模拟

1、这种题目是对代码熟练度考察&#xff0c;模拟顺时针建立或访问矩阵&#xff0c;需要注意矩阵是否为方阵 2、具体思路&#xff1a;以圈数为循环条件&#xff0c;每一圈都坚持左闭右开的区间规则&#xff1b;当小的行列值为奇数&#xff0c;最后一圈为一行或一列或一个数字的不…...

复杂技术决策如何避免“竞选广告”陷阱?工程师必备的4项流程变革

1. 从一场“选举广告”引发的思考&#xff1a;工程师如何审视复杂系统设计午餐时看新闻&#xff0c;每个广告时段都被政治竞选广告塞满&#xff0c;内容无一例外都在攻击对手&#xff0c;却对自身主张闭口不谈。这场景让我这个在电子设计自动化&#xff08;EDA&#xff09;和半…...

基于EVE ESI API与AI Agent的自动化游戏监控与数据分析实践

1. 项目概述&#xff1a;为AI助手注入EVE宇宙的灵魂 如果你是一名《EVE Online》的玩家&#xff0c;同时又对AI自动化工具感兴趣&#xff0c;那么你很可能和我一样&#xff0c;长期被一个矛盾所困扰&#xff1a;一方面&#xff0c;EVE这个沙盒宇宙充满了需要监控和管理的日常事…...

Meta发布最大视觉模型:DSG架构如何重构视觉理解范式

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次视觉理解边界的重写“Meta Just Updated the Largest Computer Vision Model in History”——这个标题乍看像科技媒体的快讯标题&#xff0c;但如果你在CV领域摸爬滚打过几年&#xff0c;第一反应不是点开链接&…...

云端AI模型基准测试:从参数迷信到效能优先的选型实战

1. 项目概述&#xff1a;一次颠覆认知的云端AI模型基准测试作为一名长期在本地部署AI智能体&#xff08;我用的是OpenClaw&#xff09;的实践者&#xff0c;模型选型一直是我工作流中的核心决策。过去几个月&#xff0c;我默认使用的都是阿里云出品的qwen3.5:397b-cloud。这个模…...

贝叶斯深度学习不确定性估计:集成学习与MC-Dropout实战对比

1. 项目概述&#xff1a;为什么我们需要量化深度学习的不确定性&#xff1f;在自动驾驶汽车识别前方障碍物、医疗AI系统诊断病灶、或者机器人进行精细操作时&#xff0c;一个错误的预测可能导致灾难性的后果。传统的深度神经网络&#xff08;DNN&#xff09;在这些任务上表现出…...

知识竞赛软件高可用架构解析:主备切换与故障自愈如何保障业务连续

&#x1f3d7;️ 知识竞赛软件的高可用架构主备切换与故障自愈之道&#x1f4cc; 引言在数字化竞赛时代&#xff0c;一场线上知识竞赛的参与者可能遍布全国&#xff0c;任何系统中断都可能导致活动失败、体验受损。因此&#xff0c;构建一个具备高可用性的知识竞赛平台&#xf…...

长裕集团上交所上市:大涨562%市值375亿 年营收18亿净利2.6亿

雷递网 雷建平 5月11日 长裕控股集团股份有限公司&#xff08;简称&#xff1a;“长裕集团”&#xff0c;股票代码&#xff1a;“603407”&#xff09;今日在上交所主板上市。长裕集团发行价为13.86元&#xff0c;发行4100万股&#xff0c;募资总额为5.68亿元。长裕集团今日开盘…...

初创团队如何借助Taotoken统一管理AI模型调用与成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何借助Taotoken统一管理AI模型调用与成本 对于资源有限的初创技术团队而言&#xff0c;在产品中集成人工智能功能已成为…...

基于Tauri与Bun的本地多智能体AI助手YouClaw:架构、配置与实战

1. 项目概述&#xff1a;一个桌面端的多智能体AI助手运行时 最近在折腾AI智能体&#xff08;Agent&#xff09;的本地化部署和集成&#xff0c;发现了一个挺有意思的开源项目——YouClaw。简单来说&#xff0c;它是一个基于Tauri 2构建的桌面应用&#xff0c;核心是一个支持多…...

ppt模板_0013_66tm黑色--运动

PPT模板分享...