Android基礎——框架模式MVVM之DataBinding的實踐


 

本篇文章包含如下內容:html

  • MVVM的介紹
  • MVVM的實踐
    • DataBinding之layout標籤的使用
    • DataBinding之data與variable標籤的使用
    • DataBinding之綁定點擊事件的使用

MVVM是Model-View-ViewModel的簡寫,這個模式提供對View和View Model的雙向數據綁定,使得View Model的狀態改變能夠自動傳遞給Viewgit

  • Model:數據層,負責處理數據的加載或者存儲
  • View:視圖層,負責界面數據的展現,與用戶進行交互
  • ViewModel:負責完成View於Model間的交互,負責業務邏輯

MVVM的模型關係圖: github

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中添加對應的IDgradle

第二步:在咱們的主Activity中,須要經過DataBindingUtil來綁定咱們的xml佈局ui

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

相關文章
相關標籤/搜索