【Android】ViewBinding+DataBinding+MVVM新手快速上手

為什么寫這篇博客

網上大部分博客,代碼量都比較大,把實際的業務都代入進去了

這篇博客的目的,就是為了講解基本原理和使用思路,然后給出一個最簡單的Demo

這里不講解具體用法,那樣篇幅會太長,直接看Demo代碼就行

什么是ViewBinding

ViewBinding是一項根據布局文件自動生成所有控件對象的技術,類似于ButterKnife

使用ViewBinding,需要在gradle腳本中開啟ViewBinding特性,編譯時會自動生成Layout對應的Binding對象

什么是DataBinding

DataBinding是一項將控件內容與對象數值進行綁定的技術

當控件內容發生改變時,對象數值自動改變

當對象數值發生改變時,控件內容也自動改變

android中的DataBinding,主要是通過ViewModel和LiveData這兩項技術來實現的

使用ViewBinding,需要在gradle腳本中開啟DataBinding特性,這樣才能使用ViewModel相關功能

什么是ViewModel和LiveData

ViewModel是一個特殊的數值容器,它可以與布局中的控件進行雙向綁定,從而實現數值自動同步

ViewModel的生命周期與Activity或Fragment進行綁定,能夠自動銷毀

LiveData也是一個特殊的數值容器,它可以對數值變化進行監聽,從而實現響應式編程特性

ViewModel和LiveData使用方法

定義ViewModel,其中的數值通過LiveData包裝

在xml中,通過layout標簽+data標簽+變量表達式的方式,來讓控件與ViewModel中的值綁定

在Activity中創建ViewModel

在Activity中為ViewModel中的LiveData添加數值監聽

在Activity中為ViewModel設置初始值

將ViewModel與Binding綁定

布局內容發生變化時,LiveData會自動更新

手動修改LiveData時,需要通過setValue或postValue來通知訂閱者

如何通過ViewModel和LiveData實現MVVM架構

創建ViewModel,將布局文件中需要綁定的屬性添加到其中

在ViewModel中創建DataRepository,用于獲取和處理數據,這個類就是負責model層工作

在Activity中,通過ViewModel訂閱DataRepository處理結果,處理結果可以通過LiveData或RxJava來訂閱

源碼

ViewBinding+DataBinding+MVVM.zip

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35369.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35369.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TENNECO EDI 項目——X12與XML之間的轉換

近期為了幫助廣大用戶更好地使用 EDI 系統,我們根據以往的項目實施經驗,將成熟的 EDI 項目進行開源。用戶安裝好知行之橋EDI系統之后,只需要下載我們整理好的示例代碼,并放置在知行之橋指定的工作區中,即可開始使用。 …

YOLOv5入門實踐(3)— 手把手教你如何去劃分數據集

前言:Hello大家好,我是小哥談。數據集標注完成之后,下一步就是對這些數據集進行劃分了。面對繁雜的數據集,如果手動劃分的話,不僅麻煩而且不能保持隨機性。本節課就給大家介紹一種方法,即使用代碼去劃分數據…

Xcode升級導致關聯庫報錯

想辦法找到對應的庫 然后到 Build Phases -- LinkBinary With Libraries中點擊,選擇對應的framework即可,就像我工程的報錯 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的庫是AdSupport.framework 添加后再次編…

Elasticsearch6.x和7.x的區別

Elasticsearch6.x和7.x的區別 1、查找方面的區別 在增刪改方面,6.x和7.x是一樣的,在查找方面(分為普通查找和有高亮的查找),6.x和7.x有區別。 在7.x的es中: org.springframework.data.elasticsearch.cor…

Styled-components,另一種css in js的方案

介紹 Styled-components是一種流行的CSS-in-JS庫,它為React和React Native應用程序提供了一種優雅的方式來管理組件的樣式。它的設計理念是將CSS樣式與組件邏輯緊密綁定在一起,從而使樣式在組件層級中作用更加清晰和可維護 使用 安裝Styled-components…

【C語言】操作符詳解

目錄 一、算數操作符 二、移位操作符 1.左移操作符 2.右移操作符 (1) 邏輯右移 (2) 算術右移 (3)小總結 三、位操作符 四、賦值操作符 五、單目操作符 六、關系操作符 七、邏輯操作符 八、 條件操作符 九、逗號表達式 十、下標引用、函數調用和結構成員 1. [ ]下…

QT-如何使用RS232進行讀寫通訊

以下是一個使用Qt進行RS232通訊的具體示例&#xff0c;包括讀取和寫入數據的操作&#xff1a; #include <QCoreApplication> #include <QDebug> #include <QSerialPort> #include <QTimer>QSerialPort serial; // 串口對象void readData() {QByteArra…

GO學習之 微框架(Gin)

GO系列 1、GO學習之Hello World 2、GO學習之入門語法 3、GO學習之切片操作 4、GO學習之 Map 操作 5、GO學習之 結構體 操作 6、GO學習之 通道(Channel) 7、GO學習之 多線程(goroutine) 8、GO學習之 函數(Function) 9、GO學習之 接口(Interface) 10、GO學習之 網絡通信(Net/Htt…

UDS的DID(Data identification)

引言 DID是UDS中的一個重要概念&#xff0c;它代表著特定的數據標識符。DID用于標識和獲取ECU中的特定參數數據&#xff0c;如傳感器數據、狀態信息等。通過使用DID&#xff0c;診斷工具可以準確地獲取所需的數據&#xff0c;從而幫助診斷人員更好地了解車輛的狀態和性能。 D…

開發者必知:.gitignore 文件的魔法,助你管理項目文件如虎添翼!

前言&#xff1a; 在軟件開發的世界中&#xff0c;版本控制是一個至關重要的環節。而 Git 作為目前最流行的分布式版本控制系統之一&#xff0c;已經成為開發者不可或缺的工具。然而&#xff0c;在日常的開發過程中&#xff0c;有些文件是不適合被納入版本控制的&#xff0c;比…

leetcode242. 有效的字母異位詞

題目&#xff1a;leetcode242. 有效的字母異位詞 描述&#xff1a; 給定兩個字符串 s 和 t &#xff0c;編寫一個函數來判斷 t 是否是 s 的字母異位詞。 注意&#xff1a;若 s 和 t 中每個字符出現的次數都相同&#xff0c;則稱 s 和 t 互為字母異位詞。 示例 1: 輸入: s “…

【React | 前端】在React的前端頁面中,判斷某個變量值是否被定義?根據是否定義顯示不同的內容?

問題描述 在React的前端頁面中&#xff0c;判斷某個變量值是否被定義&#xff1f;根據是否定義顯示不同的內容&#xff1f; 問題場景 假如&#xff0c;現在有一個需求是設計一個新功能&#xff0c;新功能中要求新增一個之前沒有的變量&#xff0c;假設是計算某一個數組的長度…

基于Java+SpringBoot+Vue的數碼論壇系統設計與實現(源碼+LW+部署文檔等)

博主介紹&#xff1a; 大家好&#xff0c;我是一名在Java圈混跡十余年的程序員&#xff0c;精通Java編程語言&#xff0c;同時也熟練掌握微信小程序、Python和Android等技術&#xff0c;能夠為大家提供全方位的技術支持和交流。 我擅長在JavaWeb、SSH、SSM、SpringBoot等框架…

【C語言】深度剖析數據在內存中的存儲

一、數據類型詳細介紹 1、數據類型介紹 &#xff08;1&#xff09;基本的內置類型 //內置類型就是C語言自帶的類型char //字符數據類型 short //短整型 int //整形 long //長整型 long long //更長的整形 float //單精度浮點數 double …

微信小程序使用rich-text解析富文本字符串的時候,遇到image標簽圖片很大超過屏幕

場景&#xff1a; 使用uniapp開發微信小程序&#xff0c;解析富文本文章需求 用到的組件&#xff1a; u-view2.0的u-parse uniapp提供的rich-text 以上兩種組件都是解析富文本的作用&#xff0c;一般用于富文本解析場景&#xff0c;比如解析文章內容&#xff0c;商品詳情&am…

桶排序-1184:明明的隨機數

【題目描述】 明明想在學校中請一些同學一起做一項問卷調查&#xff0c;為了實驗的客觀性&#xff0c;他先用計算機生成了N個1到1000之間的隨機整數&#xff08;N≤100&#xff09;&#xff0c;對于其中重復的數字&#xff0c;只保留一個&#xff0c;把其余相同的數去掉&#x…

安防監控視頻匯聚平臺EasyCVR分發的FLV視頻流在VLC中無法播放是什么原因?

眾所周知&#xff0c;TSINGSEE青犀視頻匯聚平臺EasyCVR可支持多協議方式接入&#xff0c;包括主流標準協議國標GB28181、RTSP/Onvif、RTMP等&#xff0c;以及廠家私有協議與SDK接入&#xff0c;包括海康Ehome、海大宇等設備的SDK等。在視頻流的處理與分發上&#xff0c;視頻監控…

【jvm】jvm的生命周期

目錄 一、啟動二、執行三、退出 一、啟動 1.java虛擬機的啟動是通過引導類加載器bootstrap class loader創建一個初始類&#xff08;initial class&#xff09;來完成的&#xff0c;這個類是由虛擬機的具體實現指定的(根據具體虛擬機的類型) 二、執行 1.一個運行中的java虛擬機…

ORACLE行轉列、列轉行實現方式及案例

ORACLE行轉列、列轉行實現方式及案例 行轉列案例方式1.PIVOT方式2.MAX和DECODE方式3.CASE WHEN和GROUP BY 列轉行案例方式1.UNPIVOT方式2.UNION ALL 行轉列 案例 假設我們有一個名為sales的表&#xff0c;其中包含了產品銷售數據。表中有三列&#xff1a;product&#xff08;…

FPGA實踐 ——Verilog基本實驗步驟演示

0x00 回顧&#xff1a;AND/OR/NOT 邏輯的特性 AND&#xff1a;與門可以具有兩個或更多的輸入&#xff0c;并返回一個輸出。當所有輸入值都為 1 時&#xff0c;輸出值為 1。如果輸入值中有任何一個為 0&#xff0c;則輸出值為 0。 OR&#xff1a;或門可以具有兩個或更多的輸入…