【Android Architecture】Data Binding向?qū)?/h1>

Data Binding庫是一個support庫授嘀,使用該庫大磺,您可以使用聲明性格式而非編程方式將布局中的UI組件綁定到應用程序中的數(shù)據(jù)源给郊。

布局通常在activities中使用調(diào)用UI框架方法的代碼進行定義菩浙。 例如,下面的代碼調(diào)用findViewById()來查找TextView小部件并將其綁定到viewModel變量的userName屬性:

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

以下示例顯示如何使用Data Binding庫直接在布局文件中將文本分配給widget睬愤。 這樣就無需調(diào)用上面顯示的任何Java代碼片仿。 注意在賦值表達式中使用@ {}語法:

<TextView
    android:text="@{viewmodel.userName}" />

通過在布局文件中綁定組件,您可以刪除activities中的許多UI框架調(diào)用尤辱,從而使它們更易于維護砂豌。 這也可以提高應用程序的性能,并有助于防止內(nèi)存泄漏和空指針異常光督。

注意:在許多情況下阳距,view binding可以提供與data binding相同的好處,實現(xiàn)起來更簡單结借,性能更好筐摘。 如果您主要使用data binding來替換findViewById()調(diào)用,請考慮改為使用view binding船老。

使用Data binding


使用以下頁面來學習如何在Android應用程序中使用Data binding庫咖熟。

開始
了解如何使開發(fā)環(huán)境準備好與Data binding庫配合使用,包括在Android Studio中支持Data binding代碼柳畔。

布局和綁定表達式
表達式語言允許您編寫將變量連接到布局中的視圖的表達式球恤。 Data binding庫會自動生成將布局中的視圖與數(shù)據(jù)對象綁定所需的類。 該庫提供了諸如導入荸镊,變量之類的功能,并且可以在布局中使用這些功能堪置。

庫的這些功能與您現(xiàn)有的布局無縫共存躬存。 例如,可以在表達式中使用的綁定變量是在data元素內(nèi)定義的舀锨,該數(shù)據(jù)元素是UI布局的根元素的同級元素岭洲。 這兩個元素都包裝在一個layout標簽中,如以下示例所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>

使用observable的數(shù)據(jù)對象
Data Binding提供了類和方法坎匿,可輕松觀察數(shù)據(jù)的變化盾剩。 當基礎(chǔ)數(shù)據(jù)源發(fā)生更改時,您不必擔心刷新UI替蔬。 您可以使變量或其屬性可觀察告私。 該庫使您可以觀察對象,字段或集合承桥。

生成的綁定類
Data Binding庫生成綁定類驻粟,這些綁定類用于訪問布局的變量和視圖。 該頁面顯示了如何使用和定制生成的綁定類凶异。

綁定適配器
對于每個布局表達式蜀撑,都有一個綁定適配器挤巡,可以進行設(shè)置相應屬性或偵聽器所需的框架調(diào)用。 例如酷麦,綁定適配器可以負責調(diào)用setText()方法來設(shè)置text屬性矿卑,或者調(diào)用setOnClickListener()方法來向click事件添加偵聽器。 您可以在android.databinding.adapters包中使用最常見的綁定適配器沃饶,例如本頁示例中使用的android:text屬性的適配器母廷。 有關(guān)常見綁定適配器的列表,請參閱適配器绍坝。 您還可以創(chuàng)建自定義適配器徘意,如以下示例所示:

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}

將布局視圖綁定到架構(gòu)組件
Android Support庫包含體系結(jié)構(gòu)組件,您可以使用它們來設(shè)計健壯轩褐,可測試和可維護的應用程序椎咧。 您可以將架構(gòu)組件與Data Binding庫一起使用,以進一步簡化UI的開發(fā)把介。

兩種方式的Data Binding
Data Binding庫支持雙向數(shù)據(jù)綁定勤讽。 用于這種類型的綁定的表示法支持以下功能:接收屬性的數(shù)據(jù)更改并同時偵聽用戶對該屬性的更新。

翻譯自:Android Develop

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末拗踢,一起剝皮案震驚了整個濱河市脚牍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巢墅,老刑警劉巖诸狭,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異君纫,居然都是意外死亡驯遇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門蓄髓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叉庐,“玉大人,你說我怎么就攤上這事会喝《傅” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵肢执,是天一觀的道長枉阵。 經(jīng)常有香客問我,道長预茄,這世上最難降的妖魔是什么岭妖? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上昵慌,老公的妹妹穿的比我還像新娘假夺。我一直安慰自己,他們只是感情好斋攀,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布已卷。 她就那樣靜靜地躺著,像睡著了一般淳蔼。 火紅的嫁衣襯著肌膚如雪侧蘸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天鹉梨,我揣著相機與錄音讳癌,去河邊找鬼。 笑死存皂,一個胖子當著我的面吹牛晌坤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旦袋,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骤菠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疤孕?” 一聲冷哼從身側(cè)響起商乎,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祭阀,沒想到半個月后鹉戚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡专控,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年抹凳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩官。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖境输,靈堂內(nèi)的尸體忽然破棺而出蔗牡,到底是詐尸還是另有隱情,我是刑警寧澤嗅剖,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布辩越,位于F島的核電站,受9級特大地震影響信粮,放射性物質(zhì)發(fā)生泄漏黔攒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望督惰。 院中可真熱鬧不傅,春花似錦、人聲如沸赏胚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽觉阅。三九已至崖疤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間典勇,已是汗流浹背劫哼。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留割笙,地道東北人权烧。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像咳蔚,于是被迫代替她去往敵國和親豪嚎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354