Android Data Binding(二)

接下来咱们来看一下如何使用DataBindingandroid

要使用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

 Android Data Binding(二)

主要性能:

1. 0反射

  1. 2. findViewById须要遍历整个ViewGroup,如今只须要作一次
  2. 3. 使用位标记来检验更新
  3. 4. 数据改变在下一次批量更新的时候才会触发操做。
  4. 5. 缓存表达式,如:

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>

相关文章
相关标签/搜索