新手困 ViewModel与Activting的databinding2个对象 区别
在Android开发中,ViewModel与Activity的Binding并不是同一个概念,它们分别指的是不同的功能和用途。
ViewModel:
ViewModel是一个为UI界面提供数据的类,它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用,即使配置更改(如屏幕旋转)发生,数据也不会丢失。ViewModel还可以帮助Activity和Fragment解耦,使得它们更容易进行单元测试。
Activity的DataBinding:
Data Binding是一个支持库,它允许你以声明方式绑定UI布局中的视图与应用程序数据源。这样可以在不使用findViewById()的情况下,将UI和数据源连接起来。
区别:
ViewModel主要用于数据持有,而Activity的Binding主要用于UI和数据的绑定。
解决方案和实例代码:
ViewModel的使用:
在MVVM的框架中,每一个Activity都应该对应一个ViewModel,而现在我们有一个MyActivity ,
因此可以新建一个viewmodels包,包下新建一个MyViewModel类,表示与MyActivity进行绑定。
class MyViewModel : ViewModel() {private val _myLiveData = MutableLiveData<String>()val myLiveData: LiveData<String> get() = _myLiveDatafun updateData(data: String) {_myLiveData.value = data}
}class MyActivity : AppCompatActivity() {private lateinit var viewModel: MyViewModeloverride fun onCreate(savedInstanceState: Bundle) {super.onCreate(savedInstanceState)viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)viewModel.myLiveData.observe(this, Observer { data ->// Update the UI})}
}
ViewModel是数据持久化的,因为对于一些变量就可以直接放在ViewModel当中,而不再放在Activity中,可以根据一个实际的需求来进行。
Activity的Binding使用:
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.example.User"/></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name}" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.email}" /></LinearLayout>
</layout>
注意这里要继承ViewModel, 下面先将我们的Myctivity与MyViewModel进行绑定。
class MyActivity : AppCompatActivity() {private lateinit var binding: ActivityMyBindingoverride fun onCreate(savedInstanceState: Bundle) {super.onCreate(savedInstanceState)binding = DataBindingUtil.setContentView(this, R.layout.activity_my)val user = User("John Doe", "johndoe@example.com")binding.user = user}
}data class User(val name: String, val email: String)
在这个例子中,
ViewModel用于管理数据,
而Data Binding用于将数据绑定到UI上。
这样,Activity就不需要直接操作UI元素,数据和UI的变化可以被分离处理,提高了代码的可维护性和可测试性。
相关文章:
新手困 ViewModel与Activting的databinding2个对象 区别
在Android开发中,ViewModel与Activity的Binding并不是同一个概念,它们分别指的是不同的功能和用途。 ViewModel: ViewModel是一个为UI界面提供数据的类,它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用,即使配置…...
Cocos Creator 声音播放与管理详解
Cocos Creator 是一款非常流行的游戏开发引擎,它提供了丰富的功能和工具,让开发者可以轻松构建出高质量的游戏。在游戏开发中,声音是一个非常重要的元素,可以为游戏增添氛围和趣味性。在本文中,我们将详细介绍Cocos Cr…...
今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月26日,星期日
每天一分钟,知晓天下事! 2024年5月26日 星期日 农历四月十九 1、 医保局:支持将符合条件的村卫生室纳入医保定点,方便农村居民就医。 2、 网传养老金储备严重不足?央视辟谣:这笔钱二十多年来从未动用过&a…...
IDEA快速生成类注释和方法注释的方法
1.生成类、接口、枚举、注解等文件的注释,不仅仅是class 2.生成方法注释的 可在方法上方空行输入/** 按enter键快速生成。生成的样式如下: PS:生成的返回值带一堆英文文字说明,感觉没必要 如果想生成比较全面的方法注释,如作者&…...
[集群聊天服务器]----(七)业务模块之一对一聊天、添加好友函数、好友类以及离线消息类
接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。 点对点聊天 当客户端输入msgidONE_CHAT_MSG时&#x…...
java中使用jedis连接redis
4.java中使用jedis连接redis...
【多线程开发 2】从代码到实战TransmittableThreadLocal
【多线程开发 2】从代码到实战TransmittableThreadLocal 本文将从以下几个点讲解TransmittableThreadLocal(为了方便写以下简称ttl): 前身 是什么? 可以用来做什么? 源码原理 实战 前身 ThreadLocal 要了解ttl就要先了解Java自带的类…...
【车载以太网测试从入门到精通】——SOME/IP协议测试
系列文章目录 【车载以太网测试从入门到精通】系列文章目录汇总 文章目录 系列文章目录前言一、SOME/IP时间参数1.INITIAL_DELAY时间2.REPETITIONS_MAX次数3.REPETITIONS_BASE_DELAY时间4.CYCLIC_OFFER_DELAY时间5.TIME_TO_LIVE时间6.SUBSCRIBE_RETRY_DELAY时间二、SOME/IP服务…...
作业39 sqrt应用
目录 判断完全平方数 题目描述 输出所有因数 题目描述 因子求和 题目描述 判断素数 题目描述 判断完全平方数 题目描述 输入一个整数,判断他是否是完全平方数,如果是,输出yes,否则输出no 样例 样例…...
springboot 实现跨域的几种方式
1、跨域的原因: 由于同源策略(Same Origin Policy)的限制,浏览器不允许跨域请求。同源策略规定,A网页设置的Cookie、LocalStorage和IndexDB无法被同源以外的网页读取。 2、原因: 1)浏览器的同源策略(Same Origin Policy)限制了跨域请求。主要…...
springmvc Web上下文初始化
Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的,springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…...
Verilog实战学习到RiscV - 2 : wire 和 reg 的区别
Verilog: wire 和 reg 的区别 1 引言 看Verilog例子过程中,总是分不清 wire 和 reg 的区别。这篇文章把两者放在一起总结一下,并且对比何时使用它们。 1.1 wire :组合逻辑 wire 是 Verilog 设计中的简单导线(或任意宽度的总线…...
OpenGL给定直线起点和终点不同的颜色,使用中点Bresenham画线
用鼠标左键按下确定直线起点,鼠标左键抬起确定直线终点。放一部分代码。 // 中点Bresenham算法.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <GL/glut.h> #include <iostream> #include <cmath>int windowWidt…...
IT行业的现状与未来发展趋势:从云计算到量子计算的技术变革
随着技术的不断进步,IT行业已经成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。本文将深入探讨当前IT行业的现状,并展望未来发展趋势,旨在为…...
电脑远程控制另一台电脑怎么弄?
可以远程控制另一台电脑吗? “你好,我对远程访问技术不太了解。现在,我希望我的朋友可以远程控制我的Windows 10电脑,以便她能帮我解决一些问题。请问,有没有免费的方法可以实现这种远程控制?我该如何操作…...
软件设计师备考 | 案例专题之面向对象设计 概念与例题
相关概念 关系 依赖:一个事物的语义依赖于另一个事物的语义的变化而变化 关联:一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之…...
UniApp 2.0可视化开发工具:引领前端开发新纪元
一、引言 在移动互联网迅猛发展的今天,移动应用开发已经成为前端开发的重要方向之一。为了简化移动应用开发流程,提高开发效率,各大开发平台不断推出新的工具和框架。UniApp作为一款跨平台的移动应用开发框架,自诞生以来就备受开…...
前端调用浏览器录音功能且生成文件(vue)
如果可以实现记得点赞分享,谢谢老铁~ 首先在页面中给两个按钮,分别是“开始录音”,“结束录音”。以及录音成功后生成一个下载语音的链接。 1. 先看页面展示 <template><div><button click"startRecording…...
「大数据」Kappa架构
Kappa架构是一种处理大数据的架构,它作为Lambda架构的替代方案出现。Kappa架构的核心思想是简化数据处理流程,通过使用单一的流处理层来同时处理实时和批量数据,从而避免了Lambda架构中需要维护两套系统(批处理层和速度层…...
详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)
目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时,附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库,其中…...
用App Inventor给ESP8266做个遥控App,5分钟搞定智能灯开关(保姆级教程)
5分钟打造智能灯控系统:零基础玩转App Inventor与ESP8266 第一次尝试物联网项目时,我被各种专业术语和复杂配置搞得晕头转向——直到发现这个组合:App Inventor的可视化编程加上ESP8266的Wi-Fi模块,配合巴法云的MQTT服务ÿ…...
保姆级教程:用Android Studio 2024.3.2 + ncnn,把YOLOv11模型部署到你的安卓手机上
从零开始:用Android Studio与ncnn实现YOLOv11安卓端高效部署实战 当你第一次听说能在手机上运行目标检测模型时,是不是既兴奋又忐忑?作为计算机视觉领域的标杆算法,YOLO系列以其实时性著称,而最新发布的YOLOv11更是将精…...
Ostrakon-VL 终端 Visio 图表智能解析:从图像到可编辑数据
Ostrakon-VL 终端 Visio 图表智能解析:从图像到可编辑数据 1. 效果展示开场 想象一下,当你收到一份Visio绘制的系统架构图PDF,需要快速修改其中几个组件时,传统方式只能重新绘制或手动复制。现在,Ostrakon-VL让这个过…...
LTspice FFT 仿真实战:从基础操作到高级参数调优
1. LTspice FFT功能入门指南 第一次接触LTspice的FFT功能时,我完全被那些频谱图搞懵了。后来才发现,这其实是电路仿真中最实用的分析工具之一。简单来说,FFT(快速傅里叶变换)就像给电路信号做"体检"…...
Windows11 Camera 存储路径自定义与系统声音录制全攻略
1. Windows11 Camera存储路径自定义详解 每次用Windows11自带的Camera应用拍完照片或视频,是不是总在C盘里翻来覆去找文件?我刚开始用的时候也经常遇到这个问题,直到发现原来存储路径可以自定义。下面我就把摸索出来的完整操作流程分享给大家…...
My-TODOs:免费开源的跨平台桌面待办清单应用终极指南
My-TODOs:免费开源的跨平台桌面待办清单应用终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 在信息爆炸的时代,高效管理日常任务已成为提…...
2025年Node.js打包工具终极指南:传统方案的技术价值与生态现状
2025年Node.js打包工具终极指南:传统方案的技术价值与生态现状 【免费下载链接】pkg Package your Node.js project into an executable 项目地址: https://gitcode.com/gh_mirrors/pk/pkg 在现代软件开发中,将Node.js项目打包为独立可执行文件是…...
让旧iPhone重获新生:Legacy iOS Kit全面降级与越狱指南
让旧iPhone重获新生:Legacy iOS Kit全面降级与越狱指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...
告别固定指纹:手把手教你修改Chromium源码,实现TLS JA4指纹随机化
深度定制Chromium:实现TLS JA4指纹动态随机化的完整实践指南 在当今高度监控的网络环境中,浏览器指纹识别已成为追踪用户行为的主要手段之一。TLS JA4指纹作为新一代网络指纹技术,能够通过分析客户端在SSL/TLS握手阶段提供的加密套件顺序来唯…...
Win11Debloat终极指南:三步释放Windows 11隐藏性能的完整解决方案
Win11Debloat终极指南:三步释放Windows 11隐藏性能的完整解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...
