本篇文章包含以下內容:
- MVVM的介紹
- MVVM的實踐
- DataBinding之layout標簽的使用
- DataBinding之data與variable標簽的使用
- DataBinding之綁定點擊事件的使用
MVVM是Model-View-ViewModel的簡寫,這個模式提供對View和View Model的雙向數據綁定,使得View Model的狀態改變可以自動傳遞給View
- Model:數據層,負責處理數據的加載或者存儲
- View:視圖層,負責界面數據的展示,與用戶進行交互
- ViewModel:負責完成View於Model間的交互,負責業務邏輯
MVVM的模型關系圖:
MVVM優點:
- 低耦合。視圖(View)可以獨立於Model變化和修改,一個ViewModel可以綁定到不同的”View”上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
- 可重用性。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
- 獨立開發。開發人員可以專注於業務邏輯和數據的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計界面並生成xml代碼。
- 可測試。界面素來是比較難於測試的,而現在測試可以針對ViewModel來寫。
在安卓采用DataBinding來支持MVVM框架模式,下面我們以DataBinding來實踐
實踐工具:Android Studio 2.1
准備工作:開啟安卓中的DataBinding,需要在Module下的build.gradle中聲明
- layout標簽作用:作為DataBinding的標志,省去findViewById()方法
第一步:我們以學生管理信息為例子,我們在布局文件的外層嵌套一層layout標簽,並附上命名空間,在EditText和TextView中添加對應的ID
第二步:在我們的主Activity中,需要通過DataBindingUtil來綁定我們的xml布局
DataBindingUtil.setContentView()方法返回一個數據綁定對象,其命名規則由系統自動生成,由於我們的布局名字是activity_login.xml,所以生成規則:將下划線去掉,提取xml命名(字母首大寫)+Binding
第三步:如果我們需要操作xml的View,則不需要findViewById(),直接調用binding對象里面的View即可,其控件的命名規則:將下划線去掉,提取xml命名(字母首大寫)
- data與variable標簽的作用:將對象傳進布局xml文件
第一步:由於layout標簽還需要在binding對象中使用View,還沒有完全體現MVVM的真正效果,下面在布局文件聲明data與variable標簽
在variable中,我們取個name,並將它的type指向一個Bean對象,即綁定了該對象,在使用時,通過@{ }的格式,將對象的屬性綁定到控件中
第二步:在主Activity中,只要設置這個對象即可
- 綁定onTextChanged事件:我們通過EditText的修改來更新TextView
- 綁定onClick事件:點擊TextView彈出Toast
第一步:我們在主Activity中創建一個Controller類,kite注意這個onTextChange方法的名字和參數必須和EditText原生的onTextChange一致,還有onClick方法也是
第二步:在布局文件中,聲明這個類,並給EditText加上onTextChanged事件,給TextView加上onClick事件
注意controller.onTextChanged和controller.onClick必須對應Controller里面的名字,Controller里面的方法名可以隨便取,但是參數必須和原生的方法參數一致,否則編譯報錯
第三步:在主Activity中設置這個Controller
- 綁定onClickListener事件:將xml的對象傳遞給Activity,這也是MVVM雙向數據綁定的體現
第一步:我們繼續在主Activity中Controller類,創建該方法
第二步:我們在TextView中使用該方法,並將student對象傳遞到Activity中
這里用到的我們Lambda表達式,理解起來比較困難,大家知道就好了
源碼
github:https://github.com/AndroidHensen/Design-Mode