Android中的MVVM架構設計-實用篇(二)
速度與激情7.jpg
引言
拖的時間夠久的了,趕緊來還債了...
by the way...
今天由於一些私人的關係,去了趟「大望路」的「小米體驗店」裡去體驗了一下,看到了剛剛釋出的的「小米8」,還有「小米8SE」,但是對我的感覺衝擊不是很大,不過 這兩部手機的速度肯定是沒得說的,價效比也很不錯,只是沒有讓我很想買的衝動,所以現在有想換裝置的同學,可以抽空去體驗一下再做決定,而手中的裝置還夠用,就不要著急換了,等更好的出來吧~~
(不喜勿噴哦,決定權在於你哦)
接著上一篇的mvvm的介紹,今天給大家講解下
「如何只設定一次資料,再當資料發生變化時,讓檢視直接自動變化?」
好吧,這個命題很長,大家可以精簡一下,大致意思就是如此。
請看正文
方法一、實現BaseObservable介面
即:讓我們操作的bean去繼承BaseObservable類,再去按照「特殊的規則」去編寫,即可實現。
ok,廢話不多說,直接上程式碼
extends BaseObservable class.png
ok,看到上圖中的”紅框“ 和”藍框“了嗎,當我們將User類繼承BaseObservable類後,其實不需要再重寫什麼方法,只需要
1、給之前的get方法新增 "@Bindable"註解
2、給之前的set方法的最後邊新增"notifyPropertyChanged(BR.對應的控制元件id)"
步驟一的作用就是通過註解的方式,來標記此get屬性方法,將來是要自動觸發的動作
而步驟二的作用則是,當資料發生變化時,發出此屬性已經改變的通知,從而讓dataBinding框架去自動呼叫get方法
這裡解釋下BR這個東西是什麼鬼,BR類其實類似R檔案,使我們啟用DataBinding框架之後,構建專案自動生成的類,我們可以在寫完之後點選BR的目錄,就是下圖所示
BR目錄.png
看,不是是跟自動生成的R檔案很像?
ok,只要這樣,再配合程式碼,就能達到
「只設置一次資料,再當資料發生變化時,讓檢視直接自動變化」
的效果了
我們看一下MainActivity程式碼
繼承BaseObservable方式MainActivity程式碼.png
繼承BaseObservable方法的佈局.png
此佈局其實結合了方法2的佈局,我這裡比較懶,沒刪,請自行將包含"login"的段落的忽略掉(懶成這樣真是沒救了。。。)
恩,好了,再結合上方貼上的User類就能出結果了,我們來看一下
方法1.gif
恩 效果就出來了
我們來看下一種吧
方法二、定義ObserverField物件
這個方式用的人還是蠻多的,我就不繞彎子,直接貼程式碼吧
方法2-類.png
這個方法最主要的變化就是,不再用我們以前用的變數型別去宣告變量了,而是通過「ObservableField」再集合之前的泛型,去宣告變數,當然,還需要生成getter setter方法嘍
方法2MainActivity.png
MainAcitivity程式碼基本上和方法1一致,但是請注意
ObservableField 設定內容時需要使用set方法去設定了
如
login.getPassword().set("是嗎,好帥哦~~");
方法2佈局.png
ok,看看結果吧
方法2.gif
結語
本篇算是短文了,大家可以抽幾分鐘的時間去試驗一下,接下來的文章,我將會把ImageView如何展示圖片,listview,recyclerview展示列表等一一展示,謝謝大家的支援!!