待完善
简介
Databinding用于将视图上显示的数据和后台保存的数据链接起来,实现双向绑定,简单的使用只需要如下几步。
1. 一个Databinding格式的xml布局文件
<layout>
<data>
<variable
name="variableName"
type="variableType"/><!--类型要输入全名,包括包名-->
</data>
<!--通过@{variableName.property}绑定变量,使用@={varibleName.property}实现双向绑定,例如EditText,当用户修改EditText的值时,绑定的数据也会被修改-->
<!--这里放之前的布局文件内容,省略其他属性以便简洁明了-->
<LinearLayout>
<TextView
android:text="@{variable.property1}" />
<EditText
android:text="@={variable.property2}"/>
</LinearLayout>
</layout>
2. 一个存放数据的类
如果需要在数据变化时同步更新UI需要继承自BaseObservable
,给需要绑定的数据添加get
和set
方法(双向绑定),并添加@Bindable
注释,set
方法添加notifyPropertyChanged(BR.property)
用于通知数据改变,需要更新UI。
public class ConfigItem extends BaseObservable {
private String name;
private String value;
@Bindable
public String getName() {
return name;
}
@Bindable
public String getValue() {
return value;
}
@Bindable
public void setName(String name) {
this.name = name;
//通知name属性变化,更新UI
notifyPropertyChanged(BR.name);
}
//构造方法
public ConfigItem(String name, String value){
this.name = name;
this.value = value;
}
}
3. 绑定View(view由上述xml生成)得到binding对象
//bingding对象的类名由上述xml文件名生成,生成方法是把第一个字母大写,后面每个下划线_去掉并把紧跟下划线的一个字母大写,最后在加上Binding后缀
//例如我上面的xml文件名为config_text_item.xml,生成的类名为ConfigTextItemBinding
ConfigTextItemBinding mBinding = DataBindingUtil.bind(view);
4. 使用binding对象绑定数据
ConfigItem itemData = new ConfigItem("name", "value")
mBinding.setConfig(itemData);