Android 架构 - MVVM

 一、概念

概念基于观察者模式,数据的变化会自动更新到UI。
通信

View→ViewModel:View作为观察者,监听ViewModel中数据(LiveData、Flow)的变化从而自动更新UI。

ViewModel→Model:ViewModel调用Model获取数据。

ViewModel→View:ViewModel作为被观察者,当数据发生变化时,调用接口通知订阅者View更新。

解决MVP中接口泛滥的问题(写一大堆接口导致调用链增长、调试麻烦、类爆炸、宝体积增大)、内存泄漏问题(Presenter持有具有生命周期的View实例问题)。

二、 搭建项目

2.1 Model 层

数据层详见:Repository 设计模式

2.2 VM 层

官方链接:JetPack ViewModel

  • Repository 通过构造传入ViewModel 而不是在 ViewModel 内部创建实例,是因为在 Activity/Fragment 中创建 ViewModel 实例的时候再创建 Repository 实例,这样就能跟随UI生命周期销毁。
class DemoViewModel(val repository: IDemoRepository
) : ViewModel() {private val _data = MutableLiveData<DemoBean>()val data = _data as LiveData<DemoBean>    //转为不可变类型暴露给外部fun getData() {//调用Data层获取数据更新Livedata_data.value = repository.getData()}
}class DemoViewModelFactory(private val repository: DemoRepository) : ViewModelProvider.Factory {override fun <T : ViewModel> create(modelClass: Class<T>): T {return DemoViewModel(repository) as T}
}

2.3 View 层

class DemoActivity : AppCompatActivity() {//获取ViewModelval viewModel by viewModels<DemoViewModel> { DemoViewModelFactory(DemoRepository()) } //观察Livedataoverride fun onCreateView() {    //Fragment就写在onViewCreated()中observeData()}private fun observeData() {viewModel.data.observe(this) { data ->//用数据更新UI}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Windows】windows11右键默认显示更多选项的办法

Windows11系统的右键菜单显示&#xff0c;需要多点一次“显示更多选项”才能看到所有菜单内容&#xff0c;按下面步骤简单设置一下就能恢复成Windows经典的右键菜单显示。 1. 2.输入命令【reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a…

04_Web框架之Django一

Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…

SpringBoot+FastJson 优雅的过滤 Response Body

Spring 源码系列 1、Spring 学习之扩展点总结之后置处理器&#xff08;一&#xff09; 2、Spring 学习之扩展点总结之后置处理器&#xff08;二&#xff09; 3、Spring 学习之扩展点总结之自定义事件&#xff08;三&#xff09; 4、Spring 学习之扩展点总结之内置事件&#xf…

【Stm32-F407】Keil uVision5 下新建工程

①双击鼠标左键打开Keil uVision5&#xff0c;选择 Project 下的 New uVision Project &#xff1b; ②在期望的文件夹下创建一个工程&#xff0c;并按如下要求操作&#xff1b; ③添加文件类型&#xff0c;按如下要求操作 ④如有需要可添加相关启动文件在工程文件夹下并添加到…

数据结构 AVL树概念以及实现插入的功能(含Java代码实现)

为啥要有avl树 avl树是在二叉搜索树下的一种进阶形式,是为了防止二叉搜索树在极端情况下产生的链表化的场景,从而在二叉搜索树的基础上,加上了某些条件来阻止这种极端情况的产生,但不是保证完全平衡,而是放开了一定的条件,使得这种情况不那么难以满足.(条件:左右子树的高度差的…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

【深度学习目标检测】八、基于yolov5的抽烟识别(python,深度学习)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

GD32烧录第一盏灯

学习目标 掌握基本开发流程掌握程序编译掌握程序烧录掌握GPIO初始化流程学习内容 开发流程 项目新建代码编写程序烧录验证结果需求分析 点亮LED1灯,并且闪烁。 项目新建 📎GD32Template.zip 附件为模板代码,解压后修改项目名称。 进入Project

【从零开始学习--设计模式--策略模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍策…

数据仓库与数据挖掘小结

更加详细的只找得到pdf版本 填空10分 判断并改错10分 计算8分 综合20分 客观题 填空10分 判断并改错10分--错的要改 mooc中的--尤其考试题 名词解释12分 4个&#xff0c;每个3分 经常碰到的专业术语 简答题40分 5个&#xff0c;每道8分 综合 画roc曲线 …

怎么将文件变为可执行文件

怎么将文件变为可执行文件 在Unix/Linux系统中&#xff0c;要将一个文件变为可执行文件&#xff0c;你需要使用chmod命令。以下是基本的步骤&#xff1a; 打开终端&#xff1a;使用你系统中的终端或命令行界面。 使用 cd 命令切换到包含你的文件的目录。例如&#xff1a; bash …

106基于matlab的粒子群算法与 Simulink 模型之间连接的桥梁是粒子(即 PID 控制器参数)和该粒子对应的适应值(即控制系统的性能指标)

基于matlab的粒子群算法与 Simulink 模型之间连接的桥梁是粒子&#xff08;即 PID 控制器参数&#xff09;和该粒子对应的适应值&#xff08;即控制系统的性能指标&#xff09;。优化过程如下&#xff1a;PSO 产生粒子群&#xff08;可以是初始化粒子群&#xff0c;也可以是更新…