Android >> 16. Data Binding
数据绑定库是一种支持库,借助该库,我们可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
在上一节中(Android >> 13. LiveData),我们已经能够使用LivaData 的方式实现数据的存储和管理,但是有的地方还是略显麻烦,例如对于那些TextView 和Button 的控件我们还是要去声明已经实例化,那么这一节我们就使用DataBinding 的方法使得这些操作再进行简化。
buile.gradle 文件
- 首先在buile.gradle 文件中加入这么一句,以使能数据绑定
新建ViewModel 的子类
- 第二步还是和之前一样,在java 同级目录下创建一个用来存储和管理数据的类(继承自ViewModel),这个类中你可能就会定义一些数据,和对这些数据进行操作的方法
例如这样:
layout 的xml 文件
- 既然现在我们已经使能了数据绑定,那就去到UI 布局的layout 文件中,单击整个UI 的父布局标签,然后点击“小灯泡”图标:
然后选择Convert to data binding layout,在<data>
标签中建立一个<variable>
标签,输入这个layout 的名称和类型(就是刚刚第二步创建的那个类):
java 程序文件
回顾一下刚刚我们使能了DataBinding并且创建了一个新的类,但是此时DataBinding 和新建类都没有初始化,接下来就是了
- 在onCreate() 方法之前先定义两个对象:
ViewModelWithLiveData_configure viewModelWithLiveData_configure;
ActivityConfigureBinding binding;
值得注意的是,ActivityConfigureBinding
的名称是和我们刚刚在layout 布局文件中所定义的那个名字有关的
- 然后在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 布局文件中所定义的那个名字有关的
- 然后设置观察者:
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 文件中的映射:
例如我们在新建ViewModel
类ViewModelWithLiveData_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()
了。
上一篇: 初认Java1
下一篇: Stack | 栈的数组实现
推荐阅读
-
Android >> 16. Data Binding
-
了解 uri, content provide,包括 data android:host,android:scheme(转)
-
Android实现获取meta-data和build.gradle的值
-
Android开发时尽管已root但是ddms还是没有data路径怎么办
-
Android开发时尽管已root但是ddms还是没有data路径怎么办
-
Android 进入设备后台data文件夹的办法
-
Android Data Binding 在 library module 中遇到错误及解决办法
-
Android 进入设备后台data文件夹的办法
-
Android Data Binding 在 library module 中遇到错误及解决办法
-
Android获取清单文件中的meta-data,解决碰到数值为null的问题