简单使用
在需要使用DataBinding的模块的build.gradle中增加
android {
//...
defaultConfig {
//...
dataBinding{
enabled true
}
}
}
然后同步
新建一个继承自BaseObservable
的类
public class User extends BaseObservable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Bindable
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(com.wangyz.jetpack.BR.name);
}
@Bindable
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
notifyPropertyChanged(com.wangyz.jetpack.BR.age);
}
}
在需要绑定的字段的get
方法上增加@Bindable
注解,在set方法里增加notifyPropertyChanged(com.wangyz.jetpack.BR.name)
build工程
新建布局文件,在布局最外层的节点上按alt+enter
,在弹出的选项中选择Convert to data binding layout
,布局就会转换成DataBinding格式的布局。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.wangyz.jetpack.databinding.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:onClick="update"
android:text="更新"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:text="@{user.name}" />
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:text="@{String.valueOf(user.age)}" />
</LinearLayout>
</layout>
转换后的布局,会将layout
作为最外层的节点,还会在里面增加一个data
节点。我们需要在这个data节点中增加variable
节点,并配置name
和type
属性。name命名随意,type输入前面定义的User
类。
对需要绑定的控件属性,如text赋值为@{user.name}
,意思是给text属性赋值为前面绑定的User类的name。这样当User的name发生改变时,控件的text属性就会自动改变。
在Activity中绑定User和布局
public class DataBindingActivity extends AppCompatActivity {
User user;
ActivityDatabindingBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_databinding);
user = new User("张三", 18);
binding.setUser(user);
}
public void update(View view) {
user.setName(user.getName() + "$");
user.setAge(user.getAge() + 1);
binding.setVariable(com.wangyz.jetpack.BR.user, user);
}
}
通过DataBindingUtil.setContentView(this, R.layout.activity_databinding)
来绑定,并返回Binding
,然后通过Binding的setUser
方法,就可以给布局设置数据。