接下來咱們來看一下如何使用DataBinding。android
要使用DataBinding首先須要在Android Studio的build.gradle中添加數組
android{緩存
......性能
dataBinding{gradle
enabled = trueui
}this
}.net
這樣就成功使用了dataBinding。建立了dataBinding的使用環境。線程
接下來咱們看一下dataBinding的基礎使用。指針
1.Layout文件改寫
<layout?
//原來的layout
</layout>
2.去除findViewById
a) No more findViewById
b) Binding.xxxView
3.UI/事件綁定
a) Bind UI
setVariable、setXXX
b) 事件
android:onClick
android:onLongClick
android:onTextChanged
....
如今咱們對DataBinding的用法有了必定的瞭解。下面咱們看一下DataBinding的原理。
1.android.binding
2.BR
3.XxxBinding
主要性能:
1. 0反射
a?(b?c:d):e
f?(b?c:d):f
表達式在第一次使用過以後,會被記錄,第二次使用不會再作操做,直接使用此表達式的值。
那麼DataBinding支持哪些表達式呢?
1.二元 & | ^
2.一元 + - ! ~
3.移位 >> >>> <<
4.比較 == > < >= <=
5.Instanceof
6.Grouping()
7.文字 character,String,numeric,null
8.Cast
9.方法調用
10.Field訪問
11.Array訪問[ ]
12.三元 ?:
表達式缺省,儘管如此,咱們仍是有許多表達式是在DataBinding裏不支持的。
1.this
2.super
3.New
4.顯示泛型調用
表達式空合併運算符
取非空表達式android:text=」@{user.displayName??user.lastName}」等同於
徹底版
android:text=」@{user.displayName!=null?user.displayName:user.lastName}」
表達式例子:
Margin @dimen+@dimen
android:text=」@{String.valueOf(indext+1)}」
Visibility=」@age&It;13?View.GONE View.VISIBLE」
transitionName=’@{「image_」+id}’
避免空指針
1.自動空指針檢查
{user.name}->null
{user.age}->0
2.數組越界
Include
1.Bind
< include layout = 「@layout/name」bind:user=」@{user}」/>
2.尚不支持direct child,如root爲merge
高級綁定:動態變量
RecylerView
onBindVIewHolder
final T item = mItems.get(position);
holder.getBinding().setVariable(BR.item,item);
holder.getBinding().executePendingBindings();
高級綁定:刷新
1.當即綁定
變量或Observable改變後,會在下個幀進行綁定的改變,若是須要當即執行,能夠執行executePendingBindings()
2.後臺線程
Data Binding會本地化變量/值域,以免同步問題(對collection不行)
Binding的生成
默認生成規則
下劃線分割,大寫開頭,如contact_item.xml->ContactItemBinding
自定義class
<data class = 「ContactItem」>
....
</data>