欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android >> 16. Data Binding

程序员文章站 2024-01-28 17:06:58
...

数据绑定库是一种支持库,借助该库,我们可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
Android >> 16. Data Binding
在上一节中(Android >> 13. LiveData),我们已经能够使用LivaData 的方式实现数据的存储和管理,但是有的地方还是略显麻烦,例如对于那些TextView 和Button 的控件我们还是要去声明已经实例化,那么这一节我们就使用DataBinding 的方法使得这些操作再进行简化。

buile.gradle 文件

  1. 首先在buile.gradle 文件中加入这么一句,以使能数据绑定
    Android >> 16. Data Binding

新建ViewModel 的子类

  1. 第二步还是和之前一样,在java 同级目录下创建一个用来存储和管理数据的类(继承自ViewModel),这个类中你可能就会定义一些数据,和对这些数据进行操作的方法
    例如这样:
    Android >> 16. Data Binding

layout 的xml 文件

  1. 既然现在我们已经使能了数据绑定,那就去到UI 布局的layout 文件中,单击整个UI 的父布局标签,然后点击“小灯泡”图标:
    Android >> 16. Data Binding
    然后选择Convert to data binding layout,在<data> 标签中建立一个<variable> 标签,输入这个layout 的名称和类型(就是刚刚第二步创建的那个类):
    Android >> 16. Data Binding

java 程序文件

回顾一下刚刚我们使能了DataBinding并且创建了一个新的类,但是此时DataBinding 和新建类都没有初始化,接下来就是了

  1. 在onCreate() 方法之前先定义两个对象:
ViewModelWithLiveData_configure viewModelWithLiveData_configure;
ActivityConfigureBinding binding;

值得注意的是ActivityConfigureBinding 的名称是和我们刚刚在layout 布局文件中所定义的那个名字有关的

  1. 然后在onCreate() 方法中,我们要将定义的这个绑定对象实现当前java 文件和layout 文件之间的绑定,并且还有对新建类的对象进行实例化:
binding = DataBindingUtil.setContentView(this, R.layout.activity_configure);
viewModelWithLiveData_configure = ViewModelProviders.of(this).get(ViewModelWithLiveData_configure.class);
binding.setConfigureData(viewModelWithLiveData_configure);
binding.setLifecycleOwner(this);

又要注意的是setConfigureData的名称是和我们刚刚在layout 布局文件中所定义的那个名字有关的

  1. 然后设置观察者:
viewModelWithLiveData_configure.getValueP().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        binding.pSetting.setText(s);
    }
});

viewModelWithLiveData_configure.getValueI().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        binding.iSetting.setText(s);
    }
});

viewModelWithLiveData_configure.getValueD().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        binding.dSetting.setText(s);
    }
});

至此,初始化就完成了

因为我们已经实现了java 文件与layout 文件之间的绑定,所以我们在java 文件中写的那些控件定义语句可以删掉了,例如这些:

Button begin_bt = findViewById(R.id.begin_button2);

而可以直接用binding.begin_button2 进行代替



到这里,我们实现了layout 文件在java 文件中的映射(直接使用binding.xxx 访问layout 文件资源),我们还可以实现java 文件在layout 文件中的映射

例如我们在新建ViewModelViewModelWithLiveData_configure 中有一个用来储存管理一个EditText 数据的变量configure_data_p,然后我们将layout 文件命名为configure_data,类型就为ViewModelWithLiveData_configure

则我们这个EditText 的内容就可以使用android:text="@{String.valueOf(configure_data.configure_data_p)}" 来进行映射ViewModelWithLiveData_configure 中的方法可以在Button 的onClick 属性中直接映射android:onClick="@{()->configure_data.clear_PID()}",就不用在java 文件中特意设定onClick() 了。