一、简介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