Android中的Data Binding初探 (一)

今年的Google IO大會事示,給Andorid開發(fā)者帶來了很多新東西僻肖,比如新的Material Design支持庫,還有Data Binding技術臀脏,使用Data Binding,我們可以很方便的實現(xiàn) MVVM設計模式秒啦。

MVVM設計模式

MVVM搀玖,即Model-View-ViewModel,Model提供數(shù)據(jù)巷怜,View負責顯示,ViewModel跟Model和View進行雙向綁定绣张;當View有用戶輸入后关带,ViewModel通知Model更新數(shù)據(jù)沼撕,同理Model數(shù)據(jù)更新后芜飘,
ViewModel通知View更新。


此圖出自 Web開發(fā)的MVVM模式

開發(fā)環(huán)境準備

目前Data Binding還只在Android Studio 1.3 測試版中支持笼沥,
我們可以修改Android Studio的Update Channel為Canary Channel娶牌,然后點擊“Check Now”更新到最新測試版
如圖:


Android Studio的下載和更新請自備梯子

設置編譯環(huán)境

新建一個Android Studio項目
在項目根目錄的 build.gradle中修改dependencies

dependencies {
       classpath "com.android.tools.build:gradle:1.3.0-beta2"
       classpath "com.android.databinding:dataBinder:1.0-rc0"
   }

最近gradle升級了,需要修改為1.3.0-beta2

在App Module的 build.gradle中加入databinding支持

apply plugin: ‘com.android.application'
apply plugin: 'com.android.databinding'

然后慢慢等待插件下載完成~~~

使用Data Binding

View綁定表達式

使用Data Binding 的Layout與傳統(tǒng)的稍微有點不同汹桦,我們必須使用<Layout>作為最外層的布局鉴裹,
Layout中還包含一個<Data>區(qū)域,用于指定需要綁定到這個Layout的類径荔。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"/>
   </LinearLayout>
</layout>

Data中的variable指定了需要綁定的類

<variable name="user" type="com.aswifter.databinding.model.User"/>

使用 “@{}” 這樣的表達式总处,綁定類的屬性

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{user.firstName}"/>

User類

public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}

@{user.firstName}會訪問到User類的getFirstName() 方法,這與Web開發(fā)中模板文件訪問POJO類類似。

數(shù)據(jù)綁定

Android Studio會根據(jù)Layout的名稱自動生成ViewModel類玖院,
比如activity_main.xml會自動生成一個ActivityMainBinding類,
ActivityMainBinding中的方法试溯,會根據(jù)layout中的屬性自動生成郊酒。
比如我們在layout中指定了user變量,* ActivityMainBinding*類中會自動生成setUser方法

下面我們Activity的OnCreate方法中進行數(shù)據(jù)綁定

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("Test", "User");
        binding.setUser(user);
    }

好了摹闽,以上我們就完成了第一個Data Binding程序褐健,運行代碼應該顯示User的firstName和lastName了。

如果在ListView或RecyclerView的Adapter中,我們需要使用如下方式獲取binding

ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

PS: Android Studio目前對binding對象沒有自動代碼提示俊抵,只會在編譯時進行檢查坐梯。

本文參考谷歌官方的Data Binding Guide

本文作者: 陽春面
原文地址:http://www.aswifter.com/2015/07/04/android-data-binding-1/

歡迎關注我的微信公眾號,分享Android 開發(fā)吵血,IOS開發(fā),Swift開發(fā)和互聯(lián)網(wǎng)內(nèi)容
微信號:APP開發(fā)者

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晕翠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硫麻,老刑警劉巖樊卓,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碌尔,居然都是意外死亡,警方通過查閱死者的電腦和手機柳洋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門叹坦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绪囱,你說我怎么就攤上這事莹捡。” “怎么了篮赢?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長媒咳。 經(jīng)常有香客問我,道長涩澡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任射富,我火速辦了婚禮粥帚,結果婚禮上,老公的妹妹穿的比我還像新娘柴灯。我一直安慰自己费尽,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布旱幼。 她就那樣靜靜地躺著,像睡著了一般冬三。 火紅的嫁衣襯著肌膚如雪缘缚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音钝侠,去河邊找鬼。 笑死帅韧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的双妨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泣特,長吁一口氣:“原來是場噩夢啊……” “哼挑随!你這毒婦竟也來了?” 一聲冷哼從身側響起兜挨,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柒桑,沒想到半個月后噪舀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡先改,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年蒸走,在試婚紗的時候發(fā)現(xiàn)自己被綠了骂蓖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礁遵。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔑匣,死狀恐怖恩急,靈堂內(nèi)的尸體忽然破棺而出氯庆,到底是詐尸還是另有隱情扰付,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布实昨,位于F島的核電站盐固,受9級特大地震影響丈挟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曙咽,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一溪北、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茉继,春花似錦蚀乔、人聲如沸烁竭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽终吼。三九已至氯哮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姆打,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工幔戏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留税课,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓垒玲,卻偏偏與公主長得像啸如,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氮惯,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評論 25 707
  • 在 Android 開發(fā)過程中想暗,由于 Android 作為 View 描述的 xml 視圖功能較弱帘不,開發(fā)中很容易寫...
    射覆閱讀 4,238評論 0 22
  • 相信大家對MVC,MVP和MVVM都不陌生捣郊,作為三個最耳熟能詳?shù)腁ndroid框架,它們的應用可以是非常廣泛的刮萌,但...
    約書亞Luis閱讀 1,236評論 0 13
  • 早上抽到這張的時候還一臉懵逼娘扩,可能是太久沒有寫塔羅日記了吧。晚上回來的路上又聽到同事接到了獵頭電話琐旁,心中真是翻江倒...
    塔羅師cat閱讀 181評論 0 0
  • sssss
    酥西黃閱讀 415評論 0 1