Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式

MVVM全称:Model、View、ViewModel;

  • Model:负责数据的请求、解析、过滤等数据层操作,其中Repository: 提供数据的 API(从本地或者网络)。
  • View:负责视图部分展示
  • ViewModel:作为View和Model之间的桥梁,负责监听Model的数据变化,并通知View进行更新。VM层对应MVP中的P(Presenter)层

二、KotlinMVVM架构介绍

2.1 技术摘要
  • ViewModel
    ViewModel overview
    ViewModel
  • androidx.lifecycle
  • LiveData
  • Databinding
    android.databinding
    ViewDataBinding
    kapt compiler plugin
    数据绑定库
    androidx.databinding
    Android Gradle 插件 1.5.0推出的新特性
    Android Gradle 插件 4.0.0开始放在buildFeatures
  • 网络框架1
    retrofit2 + 协程
    协程上下文与调度器 中文文档
    协程上下文与调度器 英文文档
  • 网络框架2
    retrofit2 + Rxjava3 + rxandroid
  • 日志框架
    okhttp3:logging-interceptor
  • 数据库
    room
  • api
    玩Android 开放API
  • Gradle依赖统一版本管理
    compositebuild
  • KSP
    从 kapt 迁移到 KSP
    KSP官网文档
  • TextInputEditText
2.2 项目结构图
2.2.1 compositebuild

统一管理Gradle依赖版本
在这里插入图片描述

2.2.2 baselib

在这里插入图片描述

BaseAndroidViewModel.kt代码图

在这里插入图片描述

2.2.3 app

在这里插入图片描述

三、页面代码图

3.1 登录页相关代码

LoginRepository.kt代码图
在这里插入图片描述
LoginViewModel.kt代码图
在这里插入图片描述
LoginActivity.kt代码图
在这里插入图片描述

3.2 WXArticle页面相关代码

WXArticleRespository.kt代码图
在这里插入图片描述
WXArticleViewModel.kt代码图
在这里插入图片描述
WXArticleActivity.kt代码图
在这里插入图片描述

四、提醒

  • 开启Databinding数据绑定仍需要在模块中启用 kapt。在使用数据绑定的模块中,不能移除 kapt。
  • 创建ViewModel方式
    在BaseActivity和BaseFragment里统一通过ViewModelProvider创建ViewModel
  • 如果没有封装成统一的方式,独立创建ViewModel
    在gradle里依赖androidx.activity:activity-ktx:xxx
    在Activity里,可以通过 by viewModels()
    在gradle里依赖androidx.fragment:fragment-ktx:xxx
    在Fragment里,可以通过 by activityViewModels()

五、遇到的问题

5.1 问题描述

Kotlin搭建MVVM, 使用DataBinding出现:XXX Unresolved reference: BR
在这里插入图片描述

5.2 解决问题方案

生成kapt,在模块的build.gradle.krs中添加Kotlin-apt插件

plugins {id("kotlin-kapt")
}
android {kapt{generateStubs = true}
}

六、源码

点击查看gitee上的KotlinMVVM源码demo

点击查看github上的KotlinMVVM源码demo

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

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

相关文章

Spring (18)什么是JdbcTemplate

JdbcTemplate 是 Spring 框架提供的一个主要的类,旨在简化传统 JDBC 的使用。它处理了诸如连接管理、异常处理等繁琐的低级任务,让开发者可以更专注于执行 SQL 语句和处理结果。JdbcTemplate 属于 Spring JDBC 模块(spring-jdbc)&…

每日力扣刷题day05(小白简单题)

文章目录 2024.5.26(5题)1446.连续字符题解一题解二 2824.统计和小于目标的下标对数目题解一题解二 1768.交替合并字符串题解一题解二题解三 796.旋转字符串题解一题解二 1304.和为零的 N 个不同整数题解一题解二 2024.5.26(5题) …

快速幂求逆元与逆元

我上一篇博客链接写的是多个数求乘法逆元而快速幂求逆元用于单个数求乘法逆元 逆元是对分数取模用的 对于除法取模不成立,即(a/b)%p≠(a%p/b%p)%p。求逆元的思路:(一般ACM的题目都是对1e97这种素数取模,所以gcd(a,p)1)a*b1(mod p) > b1/a…

[Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解

目录 1.按摩师1.题目链接2.算法思路详解3.代码实现 2.打家劫舍 II1.题目链接2.算法思路详解3.代码实现 3.删除并获得点数1.题目链接2.算法思路详解3.代码实现 4.粉刷房子1.题目链接2.算法思路详解3.代码实现 1.按摩师 1.题目链接 按摩师 2.算法思路详解 思路: 确…

大模型提示词Prompt学习

引言 关于chatGPT的Prompt Engineer,大家肯定耳朵都听起茧了。但是它的来由?,怎么能用好?很多人可能并不觉得并不是一个问题,或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚(因为觉得没必要深…

Redis第18讲——Redis和Redission实现延迟消息

即使不是做电商业务的同学,也一定知道订单超时关闭这种业务场景,这个场景大致就是用户下单后,如果在一定时间内未支付(比如15分钟、半小时),那么系统就会把这笔订单给关闭掉。这个功能实现的方式有很多种&a…

unity开发Hololens 制作滑动框

一定要做到最后一步,才会有效果 1、创建空物体 ,并添加组件 创建空物体 命名ScrollingObjectCollection, 添加组件如下图 下面是各个组件展开的内容 2、在ScrollingObjectCollection 下面创建两个空物体,分别命名Container、Clipping…

运筹说 第115期 | 排队论经典例题讲解

通过前几期的学习,我们已经学会了排队论的基本概念、生灭过程和Poisson过程,等待制排队模型、混合制排队模型、其他排队模型以及排队系统优的定义与相关求解方法。在实际工作中,我们能发现排队论在经济管理中有着许多应用,本期小编…

大数据量上传FTP

背景 笔者有一个需求是把将近一亿条数据上传到FTP服务器中,这些数据目前是存储在mysql中,是通过关联几张表查询出来的,查询出来的数据结果集一共是6个字段。要求传输的时候拆分成一个个小文件,每个文件大小不能超过500M。我的测试…

FuTalk设计周刊-Vol.052

#AI漫谈 热点捕手 1.ChatGPT 大更新!GPT-4 开始又变聪明了 OpenAI 官方宣布,新版 GPT-4 Turbo 今天开始向所有付费 ChatGPT 用户开放。 链接https://www.pconline.com.cn/focus/1733/17330089.html 2.刷爆多模态任务榜单!贾佳亚团队Mini-G…

Linux下环境变量配置出错导致基础命令使用不了的问题解决

问题: 当配置环境变量: echo export PATH/home/ubuntu/.local/lib/python3.8/site-packages :$PATH >> ~/.bashrc 执行生效命令 source ~/.bashrc 出现所有的基础操作命令:ls vim都使用不了 解决方式: 1&#xff09…

21.2zabbix低级自动发现-mysql多实例

配置mysql多实例 注释:自动发现:创建监控主机;低级自动发现:创建监控项 mysql单实例是直接yum安装,开启mysql多实例 准备配置文件 #mysql3307实例 cp /etc/my.cnf /etc/my3307.cnf vim /etc/my3307.cnf [mysqld] dat…

lazarus-IDE 可以开发 Node.js 吗?

Lazarus IDE 本身不是用来开发 Node.js 应用程序的工具,因为它是一个用于开发跨平台应用程序的环境,类似于 C Builder 或 Delphi。Node.js 是一个基于 JavaScript 的运行时环境,通常使用 V8 引擎,用于构建异步、事件驱动的服务器端…

产品经理-流程图结构图(四)

1. 流程图 1.1 概念 为了达到特定的目标而进行的一系列有逻辑性的操作步骤,由两个及以上的步骤,完成一个完整的行为的过程,可称之为流程 1.2 产品经理为什么需要绘制流程图? 保证产品的使用逻辑合理顺畅向项目组其他成员清晰的…

代码随想录算法训练营Day4|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、 142.环形链表II、面试题 02.07. 链表相交

24. 两两交换链表中的节点 这道题的关键在于: 1、在置换两个节点的时候,当前节点需要在这俩节点之前一个节点。并且要提前保存cur.next以及cur.next.next。 2、每次置换完一组节点,cur cur.next.next 3、判断结束的标志:奇数个节点&#xf…

如何禁止U盘拷贝文件|禁止U盘使用的软件有哪些

禁止U盘拷贝文件的方法有很多,比如使用注册表、组策略编辑器等,但这些方法都适合个人,不适合企业,因为企业需要对下属多台电脑进行远程管控,需要方便、省时、省力的方法。目前来说,最好的方法就是使用第三方…

Unity websocket客户端

🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎目标:服务器和客户端可以实时的传输信息 ☀️实现目标: 使用的w…

技术速递|无障碍应用程序之旅:键盘可访问性和 .NET MAUI

作者:Rachel Kang 排版:Alan Wang 首先让我们一起来看看您的应用程序是否支持键盘访问: 启动您的其中一个应用。如果您的设备尚未连接物理键盘,请连接物理键盘。像平常一样导航您的应用程序,并且仅使用键盘来执行此操…

如何使用Rust构建Python原生库?注意,不是动态链接库!!!

参考文档:https://github.com/PyO3/pyo3 创建python虚拟环境: conda create --name pyo3 python3.11.7激活虚拟环境: conda activate pyo3安装依赖: pip install maturin初始化项目: maturin init构建项目&#x…

设计模式--目录

设计模式是软件工程中为解决常见问题而总结出来的一系列通用解决方案。它们可以分为三大类别:创建型模式、结构型模式和行为型模式。下面列举了一些常见的设计模式及其分类: 创建型模式(Creational Patterns) 创建型模式关注对象的创建过程&#xff0c…