其他資料
https://realm.io/cn/news/data-binding-android-boyar-mount/
http://gold.xitu.io/post/578b944a128fe10063ad6c05
優(yōu)點
1. xml中的表達式會自動判空,也就是表達式本身不會拋null point異常;
2. 自動找公開成員變量或者get方法。
- xml中的表達式 contact.address 首先會嘗試直接獲取獲取,即contact.address。如果成員變量address被申明為private的,就會嘗試調用contact.getAddress()方法。
-
<android.support.v4.widget.DrawerLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:scrimColor="@{@color/scrimColor}"/>
如上,DrawerLayout元素沒有android:scrimColor 這樣的寫法,但通過app命名空間,數(shù)據(jù)綁定就會去找DrawerLayout.setScrimColor()方法,非常方便
3. 支持list map
4. 性能好,無反射。
傳統(tǒng)的findview方法耗時,并且每次findView都需要遍歷view hierarchy。但DataBinding會先遍歷一次,把各個view存儲下來,查找view的時候直接取就行了,不需要遍歷。
5. 解耦
通過
@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}"
這樣通過定義圖片加載接口loadImage實現(xiàn)了解耦,如果要改圖片加載方案,只需要改此接口。
缺點
- 無法調試數(shù)據(jù)綁定框架本身。如果有問題,只能檢查自己的寫法,或者就歸于框架bug,無法debug確定
- 是比較新的框架,后期API改動可能性大,并且框架本身仍在完善中,比如會有bug,對一些復雜情況(RecyvleView的不常用回調,自定義View等)可能沒有很成熟的支持,也不支持AdapterView對DataSource的動態(tài)綁定。針對這些復雜情況,可以在xml中給view定義id,這樣就能通過binding對象獲取view, 就可以按照傳統(tǒng)的方式處理了。
而AdapterView的DataSource動態(tài)綁定問題,可以使用開源框架解決,或者使用BindingAdapter注解,相信后續(xù)框架會更方便的支持。