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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【热门话题】Debian常用命令指南

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Debian常用命令指南引言1. 文件与目录操作lscdmkdirrmcpmv 2. 包管理aptdpkg 3.…

kubenetes中K8S的命名空间状态异常强制删除Terminating的ns

查看ns状态为异常: 查看ns为monitoring的状态为Termingating状态 使用方法一: kubectl delete ns monitoring --force --grace-period0 使用方法二: kubectl get ns monitoring -o json > monitoring.json 修改删除文件中的"kubern…

BUUCTF-Misc24

从娃娃抓起1 1.打开附件 是两个文本文件 2.电报码 电报码在线翻译网站:https://usetoolbar.com/convert/cccn.html 3.汉字五笔编码 汉字五笔编码在线网站查询:https://www.qqxiuzi.cn/bianma/wubi.php 4.转化为MD5值 将文字保存到文本文档 用winR输入…

PCIe总线-事物层之TLP请求和完成报文格式介绍(六)

1.概述 TLP报文按照类型,可以大致分为4中类型,分别是IO请求报文、存储器请求报文、配置请求报文、完成报文和消息请求报文。IO请求报文可分为IO读请求(不携带数据)和IO写请求(携带数据)。存储器请求报文可…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

【Qt】深入探索Qt窗口与对话框:从创建到管理:QDockWidget(浮动窗口)、QDialog(对话框)

文章目录 前言&#xff1a;1. 浮动窗口2. 对话框介绍2.1. 示例&#xff1a;主窗口中&#xff0c;通过点击按钮&#xff0c;弹出一个新的对话框。2.2. 创建自定义对话框2.2.1. 纯代码的方式2.2.2. 图形化界面的方式 3. 模态对话框 和 非模态对话框4. Qt 内置对话框4.1. 消息对话…

创新实训2024.05.26日志:落地基于硬盘的数据库服务

1. 需求任务列表 以下描述易学大模型软件的web应用的功能。 用户注册 用户邮箱&#xff0c;密码&#xff0c;验证码开启官方邮箱&#xff0c;用来发验证码&#xff08;QQ 网易都支持开启smtp协议&#xff0c;找教程&#xff0c;用邮箱不用手机号是为了省买发短信云服务的钱&a…

【软件设计师】先导

一、考试科目&#xff1a; 上午&#xff1a;计算机与软件工程知识&#xff0c;考试时间150min&#xff0c;75空单选题&#xff08;不一定一题一空&#xff09; 下午&#xff1a;软件设计&#xff0c;考试时间150分钟&#xff0c;问答题&#xff0c;6道只做5大题&#xff08;前四…

Nginx 的原理解析 worker 配置及相关问题 -细节狂魔

文章目录 前言Nginx 的最基本的执行过程&#xff08;master & worker&#xff09;worker 是如何进行工作的 一个 master 和 多个 woker 有哪些好处1、可以使用 nginx 热部署2、节省资源 && worker 进程之间互不影响 && nginx 服务不会中断 woker 设置多少才…

简单美观易上手的 Docker Compose 可视化管理器 Dockge

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Dockge 是 Uptime Kuma 作者的新作品&#xff0c;因此 UI 风格与 Uptime Kuma 基本一致&#xff0c;如果你正在使用 Uptime Kuma 的话&#xff0c;那么 Dockge 的 UI 设计应该也不会让你失望。Dockge 主打…

java人口老龄化社区服务与管理平台源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的人口老龄化社区服务与管理平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 人口老龄化…

MySql基础(一)--最详细基础入门,看完就懂啦(辛苦整理,想要宝宝的赞和关注嘻嘻)

前言 希望你向太阳一样&#xff0c;有起有落&#xff0c;不失光彩~ 一、数据库概述 1. 什么是数据库 数据库就是存储数据的仓库&#xff0c;其本质是一个文件系统&#xff0c;数据按照特定的格式将数据存储起来&#xff0c;用户可以对数据库中的数据进行增加&#xff0c;修改&…

Spring中的Aware接口

Spring中的Aware接口 Aware接口介绍 Aware是Spring中的接口&#xff0c;它的作用是可以让Bean获取到运行环境的相关信息。比如获取到上下文、Bean在容器中的名称等。 Spring中提供了很多Aware接口的子类&#xff0c;具体如下&#xff1a; 常用接口的作用如下&#xff1a; …

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

YOLO 学习和使用 (重拾机器学习)

contents a nenrons 单层神经网络 多层神经网络 CNN (Convolutional Neural Network) YOLO 5.1. YOLO(you only look once) 5.2. predict stage: 置信度 * 类别条件概率 全概率非极大值抑制&#xff0c;通过IOU 指数进行实现每个 grid cell 生成两个预测 bounding box 无…

呆马科技----构建智能可信的踏勘云平台

近年来&#xff0c;随着信息技术的快速发展&#xff0c;各个行业都在积极探索信息化的路径&#xff0c;以提升工作效率和服务质量。智慧踏勘云平台是基于区块链和大数据技术构建的全流程智慧可信踏勘解决平台。平台集远程视频、数据显示、工作调度、过程记录为一体&#xff0c;…

【图解IO与Netty系列】IO多路复用

IO多路复用 为什么要使用IO多路复用Linux的IO多路复用接口selectpollepoll 为什么要使用IO多路复用 我们常用的IO模型是BIO&#xff0c;我们Java里的IO流大多数都是BIO&#xff0c;也就是同步阻塞式IO&#xff0c;这种IO操作的好处是简单方便&#xff0c;但是缺点也很明显——…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充 WindowsCMD插件IDEAVsCode MavenvagrantDocker解决MySQL连接慢问题启动&#xff08;自动&#xff09;Docker注意切换到root用户远程访问MySQL MyBatisPlus代码地址参考 WindowsC…

vs2013使用qt Linguist以及tr不生效问题

一、qt Linguist&#xff08;语言家&#xff09;步骤流程 1、创建翻译文件,在qt选项中 2.选择对应所需的语言&#xff0c;得到.ts后缀的翻译文件 3.创建.pro文件&#xff0c;并将.ts配置在.pro文件中 3.使用qt Linguist 打开创建好的以.ts为后缀的翻译文件&#xff0c;按图所示…