Android Jetpack 之 DataBinding

简介

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使用。今天就到这里了。

共勉

你可能感兴趣的:(Android-Jetpack)