Data Binding Library
本文檔解釋了如何使用Data Binding Library 來(lái)編寫(xiě)聲明式布局并把綁定應(yīng)用邏輯和布局的膠合代碼最小化。
它是一個(gè)兼容庫(kù)冒签,因此擁有很強(qiáng)的靈活性和兼容性,它可以兼容到android2.1.
想要使用本庫(kù)焚碌,android 的gradle版本要大于等于1.5。你可以在這里查看如何更新android Gradle插件。
集成環(huán)境
開(kāi)始使用data binding育苟,需要在Android SDK Manager中下載支持庫(kù)。
在app的build.gradle中添加如下代碼:
Data Binding Compiler V2
android Gradle Plugin 3.1.0 Canary 6 附帶的一個(gè)可選擇的編譯器醋闭,可以在gradle.properties 文件中添加一下代碼來(lái)調(diào)用:
? ? ? ? ? ? ? ? ?android.databinding.enableV2=true
新編譯器特性:
- ViewBinding 類在使用java編譯器之前由Gradle Plugin生成礼搁,以此避免java由于不相關(guān)原因編譯失敗出現(xiàn)大量的誤報(bào)錯(cuò)誤。
- libraries 會(huì)保留其生成綁定類和映射器的信息目尖,對(duì)于多模塊項(xiàng)目來(lái)說(shuō)能顯著提高數(shù)據(jù)綁定的性能馒吴。
Data Object(DO)
這是一個(gè)plain-old Java Object(POJO),這種類型的類都是一些死數(shù)據(jù)
也可以使用JavaBeans Object:
在data binding的角度來(lái)看瑟曲,這兩個(gè)類是等價(jià)的饮戳。
Binding Data
在默認(rèn)情況下,會(huì)根據(jù)布局文件的名字來(lái)生成一個(gè)Pascal格式以Binding結(jié)尾的Binding類洞拨。例如:布局文件名為main_activity扯罐,生成的Binding類為MainAcitivityBinding。這個(gè)類持有從layout 屬性到layout View所有的binding烦衣,還知道如何為binding表達(dá)式賦值歹河。
事件處理(Even Handing)
Data Binding允許你編寫(xiě)表達(dá)式來(lái)處理從View分發(fā)出來(lái)的事件(例如OnClick)。除少數(shù)例外花吟,事件屬性名由監(jiān)聽(tīng)方法的名字來(lái)管理秸歧。例如:View.OnLongClickListener有一個(gè)onLongClick()方法,所以在需要使用這個(gè)事件的控件需要添加的屬性為:android:onLongClick="@{對(duì)象::對(duì)象的方法}"? 衅澈。就是指定對(duì)象類里面的這個(gè)方法來(lái)替代onLongClick方法處理長(zhǎng)點(diǎn)擊后執(zhí)行的邏輯業(yè)務(wù)键菱。有兩種方法來(lái)實(shí)現(xiàn):
--Method References:在你的表達(dá)式中,可引用符合監(jiān)聽(tīng)器方法簽名的方法今布。Data Binding會(huì)將方法引用和其所有者對(duì)象包裝到監(jiān)聽(tīng)器中经备,然后將監(jiān)聽(tīng)器設(shè)置到對(duì)應(yīng)的View上。表達(dá)式為空部默,不創(chuàng)建監(jiān)聽(tīng)器侵蒙,而是設(shè)置空監(jiān)聽(tīng)。
--Listener Bindings:這種方法的表達(dá)式為lambda表達(dá)式傅蹂。無(wú)論如何Data BInding都會(huì)給View設(shè)置一個(gè)監(jiān)聽(tīng)器纷闺,當(dāng)事件發(fā)生時(shí)才會(huì)判斷表達(dá)式是否為空。
前一個(gè)先判斷表達(dá)式是否為空在創(chuàng)建監(jiān)聽(tīng)器贬派,后一個(gè)不判斷直接設(shè)置急但,執(zhí)行時(shí)才判斷。
Method References