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



 

本篇文章包含以下內容:

  • 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM