博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Data Binding(二)
阅读量:6611 次
发布时间:2019-06-24

本文共 1760 字,大约阅读时间需要 5 分钟。

hot3.png

接下来我们来看一下如何使用。

要使用首先需要在Android Studio的build.gradle中添加

android{

......

dataBinding{

enabled = true

}

}

这样就成功使用了。创建了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+

android:text=”@{String.valueOf(indext+1)}”

 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>

 

转载于:https://my.oschina.net/u/2971691/blog/785433

你可能感兴趣的文章
oracle进程CPU占用太高
查看>>
python中string和bool的转换
查看>>
16.关于 file API 和 formdata
查看>>
Photoshop制作一只可爱的卡通小鸟
查看>>
大话IT第十期:由Windows 8引发的Wintel内讧
查看>>
pyspider 爬虫教程整理
查看>>
我的友情链接
查看>>
android的Activity横竖屏切换时的生命周期
查看>>
Ajax初体验
查看>>
主机屋免费空间使用有感
查看>>
文档:非群集、非共享存储的实时迁移
查看>>
我的友情链接
查看>>
技术不能抛开的飞鸽传书绿色版
查看>>
heartbeat实现web高可用
查看>>
ESXi 5.5 安装Emulex光纤卡驱动
查看>>
exchange2013和exchange online自动向发件人发送答复邮件
查看>>
codevs——2645 Spore
查看>>
iphone开发-多线程
查看>>
RHEL7新特性及RHEL6功能对比
查看>>
Windows服务器配置与管理
查看>>