深圳的網(wǎng)站建設(shè)公司官網(wǎng)seo公司推薦
為什么寫這篇博客
網(wǎng)上大部分博客,代碼量都比較大,把實(shí)際的業(yè)務(wù)都代入進(jìn)去了
這篇博客的目的,就是為了講解基本原理和使用思路,然后給出一個(gè)最簡單的Demo
這里不講解具體用法,那樣篇幅會(huì)太長,直接看Demo代碼就行
什么是ViewBinding
ViewBinding是一項(xiàng)根據(jù)布局文件自動(dòng)生成所有控件對(duì)象的技術(shù),類似于ButterKnife
使用ViewBinding,需要在gradle腳本中開啟ViewBinding特性,編譯時(shí)會(huì)自動(dòng)生成Layout對(duì)應(yīng)的Binding對(duì)象
什么是DataBinding
DataBinding是一項(xiàng)將控件內(nèi)容與對(duì)象數(shù)值進(jìn)行綁定的技術(shù)
當(dāng)控件內(nèi)容發(fā)生改變時(shí),對(duì)象數(shù)值自動(dòng)改變
當(dāng)對(duì)象數(shù)值發(fā)生改變時(shí),控件內(nèi)容也自動(dòng)改變
android中的DataBinding,主要是通過ViewModel和LiveData這兩項(xiàng)技術(shù)來實(shí)現(xiàn)的
使用ViewBinding,需要在gradle腳本中開啟DataBinding特性,這樣才能使用ViewModel相關(guān)功能
什么是ViewModel和LiveData
ViewModel是一個(gè)特殊的數(shù)值容器,它可以與布局中的控件進(jìn)行雙向綁定,從而實(shí)現(xiàn)數(shù)值自動(dòng)同步
ViewModel的生命周期與Activity或Fragment進(jìn)行綁定,能夠自動(dòng)銷毀
LiveData也是一個(gè)特殊的數(shù)值容器,它可以對(duì)數(shù)值變化進(jìn)行監(jiān)聽,從而實(shí)現(xiàn)響應(yīng)式編程特性
ViewModel和LiveData使用方法
定義ViewModel,其中的數(shù)值通過LiveData包裝
在xml中,通過layout標(biāo)簽+data標(biāo)簽+變量表達(dá)式的方式,來讓控件與ViewModel中的值綁定
在Activity中創(chuàng)建ViewModel
在Activity中為ViewModel中的LiveData添加數(shù)值監(jiān)聽
在Activity中為ViewModel設(shè)置初始值
將ViewModel與Binding綁定
布局內(nèi)容發(fā)生變化時(shí),LiveData會(huì)自動(dòng)更新
手動(dòng)修改LiveData時(shí),需要通過setValue或postValue來通知訂閱者
如何通過ViewModel和LiveData實(shí)現(xiàn)MVVM架構(gòu)
創(chuàng)建ViewModel,將布局文件中需要綁定的屬性添加到其中
在ViewModel中創(chuàng)建DataRepository,用于獲取和處理數(shù)據(jù),這個(gè)類就是負(fù)責(zé)model層工作
在Activity中,通過ViewModel訂閱DataRepository處理結(jié)果,處理結(jié)果可以通過LiveData或RxJava來訂閱
源碼
ViewBinding+DataBinding+MVVM.zip