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>

相關文章
相關標籤/搜索