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