简介
DataBinding 是 Google 在 Jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页
面组件中直接绑定应用程序的数据源。使其维护起来更加方便,架构更明确简介。
个人理解
DataBinding 是以声明的方式,将布局中组件与应用程序数据源绑定在一起的框架库。
作用:
1,将布局组件与源数据绑定,使数据源变化的同时布局组件及时同步更新。
2,减少Activity中View的定义与初始化,让Activity代码更加专注于界面逻辑。
3,可自定义适配器,实现扩展组件的属性功能。
4,可自定义事件,实现各种组件的事件触发功能。
话不多说,先来看看怎么使用:
一、引入
1、在 build.gradle 中添加以下代码:
android {
//...
dataBinding{
enabled = true
}
}
注:如果使在module里面使用该框架的话,在module与主项目的build.gradle都要添加上述代码。
二、布局文件中绑定数据源。
Person bean文件:
public class Person extends BaseObservable {
private String name;
private String sex;
@Bindable
public String getName() {
return name;
}
@Bindable
public String getSex() {
return sex;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
}
注:源数据需要继承 BaseObservable & 对组件中应用属性的 get() 添加 @Bindable 注解。
页面activity代码:
/**
*注释1:DatabindingBindingImpl 由框架编译时生成,负责通知界面同步更新(命名方式:xml文件名 + BindingImpl);
* 注释2:DataBindingUtil 将布局文件与Activity关联 & 生成 DatabindingBindingImpl 实例;
* 注释3:通知界面更新;
*/
public class MVVMDataBindActivity extends AppCompatActivity {
private ActivityMvvmDatabindBinding binding;//1
//
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_mvvm_databind);//2
Person person = new Person();
person.setName("白展堂");
person.setSex("男");
binding.setPerson(person);//3
}
}
进行到这一步我们界面的数据已经能显示了。当然,DataBinding肯定不止这些功能,接下来我们来看看组件的事件绑定。
我们先来看看第一种事件直接绑定
还是一样先看看代码,布局文件:
接下是Activity类:
/**
*注释1:将事件绑定
* 注释2:事件绑定的实现方法
*/
public class MVVMDataBindActivity extends AppCompatActivity {
private ActivityMvvmDatabindBinding binding;
//
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_mvvm_databind);
binding.setMyclick(this);//1
}
public void onMyClick(View view) {//2
Toast.makeText(this, "点击事件", Toast.LENGTH_SHORT).show();
}
}
第二种是事件自定义参数绑定
布局文件
看看界面代码:
public class MVVMDataBindActivity extends AppCompatActivity {
private ActivityMvvmDatabindBinding binding;
//
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_mvvm_databind);
//将声明的类初始化 & DatabindingBindingImpl 进行关联;
binding.setMyclick(this);
binding.setStr("我是自定义");
}
public void onMyClick(View view) {//2
Toast.makeText(this,"点击事件",Toast.LENGTH_SHORT).show();
}
//实现事件自定义参数的方法;
public void getData(View view,String str){
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
其实个人觉得DataBinding单独这样用的话并不会给我们开发带来很多的便利,真正使用的话应该是配合Jetpack另一个利器ViewModel使用,更能让JetPack框架体现极致,让开发者更方、便快捷的开发自己应用,减少过多的界面更新的逻辑代码。
下次看看有没有机会写写ViewModel,结合DataBinding使用。今天就到这里了。
共勉