Data Binding 使用教程一

好长时间不写文章了,最近公司项目中用到了DataBinding,首次接触,就来和大家探讨下...哈哈

1. 为什么要使用DataBinding

1.目前一般情况下,我们在实现UI 界面时,通常都是使用 View.findViewById(); 各种更新 View 属性的 setter:setText(),setVisibility(),setEnabled() 或者 setOnClickListener() 等等这些重复而且没有营养的代码。写的越多,出现bug的几率就越多。
2.有了Databinding 就一样了,我们可以避免写很多“无用”的代码。
3.Databinding 是一个实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具,有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。
4.使用 Data Binding 会增加编译出的 apk 文件的类数量和方法数量。
新建一个空的工程,统计打开 build.gradle 中 Data Binding 开关前后的 apk 文件中类数量和方法数量,类增加了 120+,方法数增加了 9k+(开启混淆后该数量减少为 3k+)。
如果工程对方法数量很敏感的话,请慎重使用 Data Binding。

2. 如何使用DataBinding

最低需要Android 2.0的环境, Gradle 1.5 alpha 及以上自带支持 DataBinding,仅需在使用 DataBinding 的 module 里面的 build.gradle 里面加上配置即可:

 android {
    ...
    dataBinding {
        enabled = true
    }
    ...
}复制代码
如果gradle 的版本小于1.5,需要
 android {
    ...
    dataBinding {
        enabled = true
    }
    ...
}
dependencies{
    classpath 'com.android.tools.build:gradle:1.2.3'
    classpath 'com.android.databinding:dataBinder:1.0-rc0' 
}
为用到 Data Binding 的模块添加插件,修改对应的 build.gradle。
apply plugin: 'com.android.databinding'

复制代码

3.DataBinding 使用场景和表达式

使用场景
  • 单纯的摆脱findviewbyid
  • 绑定基本数据类型及String
  • 绑定Model数据包括imageURL
  • 绑定事件
  • 通过静态方法转换数据类型
  • 通过运算符操作数据
  • 自定义Binding的类名
  • 绑定相同Model的操作
  • model变量改变自动更新数据
  • 绑定List/Map等集合数据
  • Observable自动更新
  • Databinding与include标签的结合
  • DataBinding与RecyclerView的结合
表达式
  • 数学 + - / * %
  • 字符串连接 +
  • 逻辑 && ||
  • 二进制 & | ^
  • 一元运算 + - ! ~
  • 移位 >> >>> <<
  • 比较 == > < >= <=
  • instanceof
  • 分组 ()
  • null
  • Cast
  • 方法调用
  • 数据访问 []
  • 三元运算 ?:

示例:

android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
复制代码

缺少的操作:

  • this
  • super
  • new
  • 显式泛型调用
Null 合并

?? - 左边的对象如果它不是null,选择左边的对象;或者如果它是null,选择右边的对象:

android:text="@{user.displayName ?? user.lastName}"复制代码

避免 NullPointerException

Data Binding代码生成时自动检查是否为null 来避免出现null pointer exceptions错误。例如,在表达式@{user.name}中,如果user是null,user.name会赋予它的默认值(null)。如果你引用user.age,age是int类型,那么它的默认值是0。

4. DataBinding 的简单使用

新建类 Person


public class Person {
private String name;
private String sex;
private String age;
public String getName() {
return name;
}
public Person(String name, String sex, String age) {
this.name = name;
this.sex = sex;
this.age = age;
}
getter setter...
}
复制代码

activity


binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setView(this);
Person person = new Person("feng", "girl", 22);
binding.setPerson(person);
复制代码

activity_main.xml

复制代码
<data>
    <variable
        name="view"
        type="com.xiaohong.fengok.MainActivity"/>
    <import type="com.xiaohong.fengok.bean.Person"/>

    <variable
        name="person"
        type="Person"/>
</data>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{person.age}"/>
</RelativeLayout></layout>复制代码
复制代码

复制代码

转载于:https://juejin.im/post/59e2b6db6fb9a0452935cb00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值