Android MVVN 使用入门

news/2024/10/30 9:24:55/

MVVM(Model-View-ViewModel)是一种基于数据绑定的设计模式,它与传统的 MVC 和 MVP 模式相比,更加适合处理复杂的 UI 逻辑和数据展示。在 Android 开发中,MVVM 通常使用 Data Binding 和 ViewModel 实现。

在这里插入图片描述

下面是一个简单的示例,介绍如何在 Android 中使用 MVVM。

首先,我们需要在项目中添加 Data Binding 和 ViewModel 相关依赖:

android {...dataBinding {enabled = true}
}dependencies {...implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0'implementation 'androidx.lifecycle:lifecycle-livedata:2.4.0'
}

接着,我们创建一个 Model 类,用于存储数据:

data class User(val name: String, val age: Int)

然后,我们创建一个 ViewModel 类,用于处理数据逻辑:

class UserViewModel : ViewModel() {private val _user = MutableLiveData<User>()val user: LiveData<User>get() = _userinit {_user.value = User("张三", 18)}fun changeUserName(newName: String) {val oldUser = _user.value ?: return_user.value = oldUser.copy(name = newName)}
}

在上面的代码中,我们使用了 LiveData 来管理数据,并且提供了一个 changeUserName() 方法,用于修改用户的名字。

接下来,我们创建一个布局文件,用于展示数据:

<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="viewModel"type="com.example.sample.UserViewModel" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:text="@{viewModel.user.name}"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:text="修改名字"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{() -> viewModel.changeUserName(`李四`)}"/></LinearLayout>
</layout>

在上面的代码中,我们使用了 Data Binding 来绑定 ViewModel,并且使用了双向数据绑定来展示用户的名字。同时,我们还提供了一个按钮,用于修改用户的名字。

最后,我们在 Activity 中使用 ViewModel 和 Data Binding 来展示数据:

class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingprivate val viewModel by viewModels<UserViewModel>()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = DataBindingUtil.setContentView(this, R.layout.activity_main)binding.lifecycleOwner = thisbinding.viewModel = viewModel}
}

在上面的代码中,我们使用了 viewModels() 方法来创建 ViewModel,并且使用 Data Binding 来绑定 ViewModel 和布局文件。同时,我们还指定了 Activity 为布局文件的生命周期所有者,以便 LiveData 正确地进行数据更新。

综上所述,以上就是一个简单的 Android MVVM 示例代码。在实际开发中,MVVM 可以更好地分离业务逻辑和 UI 展示,使代码更加清晰和易于维护。


http://www.ppmy.cn/news/70252.html

相关文章

小黑子—Java从入门到入土过程:第九章-IO流

Java零基础入门9.0 Java系列第九章- IO流1. 初识IO流2. IO流的体系2.1 字节流2.1.1 FileOutputStream 字符串输出流2.1.1 - I 字符串输出流的细节2.1.1 - II FileOutputStream写数据的3种方式2.1.1 -III FileOutputStream写数据的两个小问题 2.1.2 FileInputStream 字符串输入流…

Vue3 实现模态框组件

基于 Vue 3 实现模态框&#xff0c;并且单击遮罩层可关闭模态框 下面是一个基于 Vue 3 实现的模态框&#xff0c;并且点击遮罩层可关闭模态框的示例代码&#xff1a; <template><div class"modal-wrapper" v-show"visible" click.self"clos…

Mysql中select语句的执行流程?

Mysql中select语句的执行流程&#xff1f; 答&#xff1a; SELECT 语句的执行过程为&#xff1a;连接、查询缓存、a词法分析&#xff0c;语法分析&#xff0c;语义分析&#xff0c;构造执行树&#xff0c;生成执行计划、执行器执行计划&#xff0c;下面开始梳理一次完整的查询…

对SRC并发漏洞挖掘的思考

对SRC并发漏洞挖掘的思考 1.burpsuite Turbo插件使用2.并发点赞测试3.并发验证码测试4.某代金券逻辑测试5.有限制的并发验证码绕过6.对于并发漏洞的思考 1.burpsuite Turbo插件使用 Turbo Intruder是一个用于发送大量HTTP请求并会分析其结果的Burp Suite扩展。它旨在补充Burp …

JWT 入门

1.介绍 JSON Web Token&#xff08;JWT&#xff09;是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO…

网络编程 lesson4 linux下的IO模型和特点

目录 阻塞式IO 工作流程 非阻塞式IO 工作流程 设置非阻塞IO方法 fcntl实例 信号驱动IO 工作流程 实例&#xff1a;在LINUX下检听自己鼠标的动作 IO多路复用&#xff08;重点&#xff0c;难点&#xff09; 工作流程 本文核心内容&#xff01;&#xff01;&#xff01…

自动化测试 —— Airtest

最近在做APP自动化过程中&#xff0c;有调研Airtest框架的使用&#xff0c;便初步介绍一下Airtest框架的使用&#xff0c;有兴趣的小伙伴&#xff0c;可以一起探讨学习~ (一&#xff09;背景 Airtest是什么&#xff1f; Airtest是一款基于Python的、跨平台的UI自动化测试框架&…

基于html+css图展示58

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…