DataBinding深入實戰(zhàn)(一)-@BindingAdapter天馬行空的binding

這2天正在編輯和整理之前的項目脚粟,稍后會把完整的binding例子工程整理好放到github上去趋观。

本系列不是databinding的基礎使用講解,基礎使用看官方文檔就夠了捉片,這里是對于官方提供的所有基礎功能挖掘侈净,怎么樣的能夠利用它簡化開發(fā)工作,發(fā)揮天馬行空的想象力晕鹊,同時也是拋磚引玉岛请,啟發(fā)大家發(fā)掘出各種用法旭寿。

Google官方的Databinding已經(jīng)推出很久了,但是國內(nèi)使用者其實還不多崇败,有很大一部分原因是大家搜索到的教程盅称,其實只是各個功能點最基礎的應用,有些同學淺嘗輒止的看過后會覺得:”其實沒有方便多少嘛“后室。實際上缩膝,這個庫目前來看,絕對不應該被看成是一個包裝完全了的傻瓜式使用庫岸霹,而應該把它看成是一個原材料疾层,它提供給你了無限的可能,你要基于它各種強大的基礎功能贡避,發(fā)揮你的想象力才可能發(fā)現(xiàn)它的好用之處痛黎。

本篇介紹的是其中的一個知識點予弧,由淺入深介紹幾個在自己工程實踐中突發(fā)奇想的一些用法。

一. @BindingAdapter 介紹

我們在xml中會給view添加各種屬性湖饱,比如 textSize = xxx桌肴。databinding庫為我們提供了一種方法,就是擴展view控件的xml屬性琉历,而且使用起來非常簡單,就是在你的項目里寫一個類水醋,然后根據(jù)每一個屬性寫一個方法旗笔,使用@BindingAdapter告訴databinding框架這個方法就是用來自定義屬性的。

1拄踪。簡單應用蝇恶,view動態(tài)控制:

自定義屬性

如上圖,我們寫了一個方法惶桐,public static void imageSrc(ImageView view, int resId) 用這個方法來給ImageView控件添加一個xml屬性:imageSrc(通過注解@BindingAdapter來指定這個屬性在xml里應該叫什么)撮弧。 這樣在xml里我們就可以利用這個屬性來給imageView來添加圖片。

xml中使用方式如下:

我們來看imageView的最后一行姚糊,?android:imageSrc="@{menuBean.src()}" 就是我們上面自定義的方法贿衍。這個menuBean 是我們在當前xml頁面綁定的一個數(shù)據(jù)對象。這樣一來救恨,我們就可以調(diào)用這個對象的一個方法:src() 來給iageView指定圖片贸辈。

如果你要問,這樣做的意義何在肠槽?imageView自己就有設置圖片的方法啊擎淤。

我們考慮如下情況,一個imageView秸仙,圖片不是固定的嘴拢,比如根據(jù)用戶級別來顯示不同圖片。這樣一來寂纪,我們自定義這個屬性就派上用場了席吴,從服務端獲取到用戶數(shù)據(jù)后,我們在menuBean內(nèi)部就可以計算判斷出當前應該顯示的圖片是什么弊攘,并且賦值給這個成員變量抢腐。這樣進入頁面的時imageview就會顯示我們想要的圖片。

而我們不在需要代碼中寫mageView的resource控制襟交,而通常要控制一個view迈倍,我們都需要在activity都代碼中來寫,這就意味這這段代碼既要引用到view捣域,又要引用到數(shù)據(jù)data對象啼染,不符合代碼低耦合的觀點宴合。而用這種方式以后,data對象里不需要知道view的存在迹鹅,activity里也不需要去代碼讓這2者關(guān)聯(lián)卦洽,而是成功的轉(zhuǎn)到了xml中的一條屬性。

src方法如下:

類似的可以有很多場景斜棚,比如網(wǎng)絡圖片的url阀蒂,文字背景色切換等等。發(fā)揮你的想象力弟蚀,把代碼中view和data關(guān)聯(lián)的邏輯代碼解放出來把蚤霞。


2.創(chuàng)造屬性實現(xiàn)多個view之間的觀察者模式

現(xiàn)在大家都開始喜歡響應式編程,基于java內(nèi)置都觀察者api义钉,我們平時也可以轉(zhuǎn)變思維來多用響應式昧绣。

例子:比如一個editText,有需求這個edittext獲取焦點捶闸,正在編輯都時候夜畴,頁面上其他的一些view要跟著有變化。最直接的做法就是我們在代碼里寫editText的監(jiān)聽事件删壮,然后在找到各個需要處理的view贪绘,去代碼控制他們改變。而通常這一戰(zhàn)場又出現(xiàn)在activity里醉锅,只有這里才是view 門的聚會場所···兔簇。

現(xiàn)在我們改變下思路,不去主動的控制這些view硬耍,而讓這些view去響應改變垄琐,EditText作為obervable被觀察,需要響應改變的views作為observer经柴,當觀察到editText在編輯狀態(tài)時狸窘,則作出自己的響應。

舉例:

(1)自定義類繼承EditText坯认,在獲取焦點時候翻擒,像其他的view發(fā)出消息通知。

(2) 自定義響應的view 實現(xiàn)Observer接口牛哺,文中以textView舉例:update方法會自動響應observable對象發(fā)出的消息陋气。

(3)用@BindingAdapter創(chuàng)建方法將二者聯(lián)系起來。

如上引润,我們可以對這個自定義的EditText擴展一個xml屬性:observer巩趁,像其注冊觀察者。這樣我們就可以把2者的鏈接互動通過一條xml屬性就完成淳附,而不需要在去寫任何的代碼:

就是這樣议慰,我們只要一個xml屬性蠢古,就像這個editText注冊了一個TextView作為觀察者,當edit被編輯時候别凹,這個textView會自動進入selected狀態(tài)草讶。


3.自定義屬性接管listview adapter創(chuàng)建,從此不再寫adapter

---未完待續(xù)---

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炉菲,一起剝皮案震驚了整個濱河市堕战,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拍霜,老刑警劉巖践啄,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沉御,居然都是意外死亡,警方通過查閱死者的電腦和手機昭灵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門吠裆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烂完,你說我怎么就攤上這事试疙。” “怎么了抠蚣?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵祝旷,是天一觀的道長。 經(jīng)常有香客問我嘶窄,道長怀跛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任柄冲,我火速辦了婚禮吻谋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘现横。我一直安慰自己漓拾,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布戒祠。 她就那樣靜靜地躺著骇两,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姜盈。 梳的紋絲不亂的頭發(fā)上低千,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音贩据,去河邊找鬼栋操。 笑死闸餐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的矾芙。 我是一名探鬼主播舍沙,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剔宪!你這毒婦竟也來了拂铡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葱绒,失蹤者是張志新(化名)和其女友劉穎感帅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體地淀,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡失球,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了帮毁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片实苞。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烈疚,靈堂內(nèi)的尸體忽然破棺而出黔牵,到底是詐尸還是另有隱情,我是刑警寧澤爷肝,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布猾浦,位于F島的核電站,受9級特大地震影響灯抛,放射性物質(zhì)發(fā)生泄漏金赦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一对嚼、第九天 我趴在偏房一處隱蔽的房頂上張望素邪。 院中可真熱鬧,春花似錦猪半、人聲如沸兔朦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沽甥。三九已至,卻和暖如春乏奥,著一層夾襖步出監(jiān)牢的瞬間摆舟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恨诱,地道東北人媳瞪。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像照宝,于是被迫代替她去往敵國和親蛇受。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 用兩張圖告訴你厕鹃,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料兢仰? 從這篇文章中你...
    hw1212閱讀 12,724評論 2 59
  • 先吐槽下,不說不爽剂碴,不說不通達 不吐不快把将,集合我這幾天學習 DataBinding 的經(jīng)歷說幾句。DataBind...
    前行的烏龜閱讀 21,254評論 13 46
  • 目錄 一忆矛、MVVM和dataBinding介紹 二察蹲、初步使用 三、其他使用1. 事件處理2.viewstub和in...
    下位子閱讀 4,432評論 6 19
  • 我們把樣本分成三個部分催训,分別是訓練集递览、驗證集和測試集。這里說的學習曲線主要是訓練平方誤差和驗證平方誤差曲線瞳腌,通過觀...
    快樂的小飛熊閱讀 1,226評論 0 0