接下来咱们来看一下如何使用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>