Databinding 使用二

上一篇中我们介绍了 databinding 的简单使用, 简单绑定view, 以及加载显示静态的数据, 但是实际在使用的过程中, 我们可能需要动态的改变一些 view 的值, databinding 帮我们很轻松的实现了这个功能~~


我们需要改变的就是实体 bean 类, 让实体类继承BaseObservable,

public class TestBean extends BaseObservable {

    public final ObservableField userName = new ObservableField<>();
    Boolean showFlag = true;

    @Bindable
    public Boolean getShowFlag() {
        return showFlag;
    }

    public void setShowFlag(Boolean showFlag) {
        this.showFlag = showFlag;
        notifyPropertyChanged(BR.showFlag);
    }
}

以上bean类中使用了两种动态绑定方法

  1. 使用@bindable注解, 在属性的 get 方法上进行注解, 编译之后, 会在BR文件中生成对应的变量 id, 如上为 BR.showFlag, 当我们绑定的 testBean 对象中的 showFlag 产生变化时, 布局显示会自动根据绑定的实际值去刷新 view, 相当智能, 省去了很多 activity中无用的成员变量, 以及后期的找 view 设置值.
  2. 使用 ObservableField<>定义属性, 这样写相当于不需要再写 getset 的两个对应方法, 同样可以达到动态绑定数据的效果.

在 bean 中进行动态属性的绑定后, 我们在 xml 中可以自由自在的使用需要的属性了~

关于xml中引用表达式

xml 支持大多数的 java 表达式:

android:text="@{String.valueOf(age)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:text='@{"iname:" +user.name}'

除了户外还支持 null 合并操作, 就很牛逼了~

android:text="@{user.displayName ?? user.lastName}"
//等价于
android:text="@{user.displayName != null ? user.displayName : user.lastName}"

相比较 java 代码不支持的是:
• this
• super
• new
• 显式泛型调用


在 xml布局中, 在设置一些值或者变量的时候, 可能需要使用转义字符,否则没有办法编译通过, 常见的转义字符包括:

显示结果 描述 转义字符 十进制
空格  ;  ;
< 小于号 <; <;
> 大于号 >; >;
& 与号 &; &;
" 引号 "; ";
撇号 &apos; ';
× 乘号 ×; ×;
÷ 除号 ÷; ÷;

事件处理

我们经常需要处理一些 view 的点击事件, 通常我们的方法是setOnClickListener(), 或者通过ButterNife第三方绑定点击事件, 引入 dataBinding 后, 有两种方法去设置点击事件:

  1. 通过activity绑定到 onclick 事件
    

        

    

            

你可能感兴趣的:(Databinding 使用二)