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.pswp.cn/bicheng/15931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15931.shtml
英文地址,請注明出處:http://en.pswp.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…