其他資料
https://realm.io/cn/news/data-binding-android-boyar-mount/
http://gold.xitu.io/post/578b944a128fe10063ad6c05
優(yōu)點(diǎn)
1. xml中的表達(dá)式會(huì)自動(dòng)判空,也就是表達(dá)式本身不會(huì)拋null point異常酒来;
2. 自動(dòng)找公開(kāi)成員變量或者get方法须妻。
- xml中的表達(dá)式 contact.address 首先會(huì)嘗試直接獲取獲取鞍恢,即contact.address腊敲。如果成員變量address被申明為private的缅疟,就會(huì)嘗試調(diào)用contact.getAddress()方法捍靠。
-
<android.support.v4.widget.DrawerLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:scrimColor="@{@color/scrimColor}"/>
如上墓臭,DrawerLayout元素沒(méi)有android:scrimColor 這樣的寫(xiě)法,但通過(guò)app命名空間核芽,數(shù)據(jù)綁定就會(huì)去找DrawerLayout.setScrimColor()方法,非常方便
3. 支持list map
4. 性能好囚戚,無(wú)反射。
傳統(tǒng)的findview方法耗時(shí)轧简,并且每次findView都需要遍歷view hierarchy驰坊。但DataBinding會(huì)先遍歷一次,把各個(gè)view存儲(chǔ)下來(lái)哮独,查找view的時(shí)候直接取就行了庐橙,不需要遍歷假勿。
5. 解耦
通過(guò)
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error) {
Picasso.with(view.getContext()).load(url).error(error).into(view);
}
按照定義好的圖片加載方法,在xml中直接使用
app:error="@{@drawable/error}"
app:imageUrl="@{imageUrl}"
這樣通過(guò)定義圖片加載接口loadImage實(shí)現(xiàn)了解耦态鳖,如果要改圖片加載方案,只需要改此接口恶导。
缺點(diǎn)
- 無(wú)法調(diào)試數(shù)據(jù)綁定框架本身浆竭。如果有問(wèn)題,只能檢查自己的寫(xiě)法惨寿,或者就歸于框架bug邦泄,無(wú)法debug確定
- 是比較新的框架,后期API改動(dòng)可能性大裂垦,并且框架本身仍在完善中顺囊,比如會(huì)有bug,對(duì)一些復(fù)雜情況(RecyvleView的不常用回調(diào),自定義View等)可能沒(méi)有很成熟的支持蕉拢,也不支持AdapterView對(duì)DataSource的動(dòng)態(tài)綁定特碳。針對(duì)這些復(fù)雜情況,可以在xml中給view定義id,這樣就能通過(guò)binding對(duì)象獲取view, 就可以按照傳統(tǒng)的方式處理了晕换。
而AdapterView的DataSource動(dòng)態(tài)綁定問(wèn)題午乓,可以使用開(kāi)源框架解決,或者使用BindingAdapter注解闸准,相信后續(xù)框架會(huì)更方便的支持益愈。