DataBinding是什么
DataBinding是 Google 推出的一个数据绑定的支持库,它可以将数据和UI进行绑定,能够让UI随着数据变化而变化,也可以让数据随着UI变化而变化,无需再写代码去更新UI或数据
它解决了两个问题:
1.麻烦的findViewById()
2.更新UI数据需切换至UI线程
MVVM架构(Model–View–ViewModel)
DataBinding的使用准备
Android Studio版本在1.3以上
gradle版本在1.5.0-alpha1以上
在app的build.gradle中添加(标红部分):
android {
....
dataBinding {
enabled =true
}
}
DataBinding的使用(只写了关键代码)
布局文件:例如login.xml
布局文件结构如下,最外层必须为layout标签,data标签相当于java文件,比如import关键字和java文件里意思一样,导包。variable标签相当于定义变量,name为变量名,type为变量类型 等等。
下面在布局里引用声明对象时格式如android:text="@={account.userName}",就可以把text的属性值和userName双向绑定,一个变化,另一个就会变化,要实现双向绑定,userName的属性不能为普通的string类型,单向绑定可以为普通类型,后面会说到属性的类型。
<layout xmlns:android=http://schemas.android.com/apk/res/android>
<data>
<import type=“android.view.View”/> <!-- 导入数据类型 -->
<variable <!– 声明对象-->
name="account"
type="com.byd.databindingdemo.model.Account" />
</data>
<LinearLayout>
<EditText
android:text="@={account.userName}"/>
</LinearLayout>
</layout>
数据类: 例如Account.java
如果只需要单向绑定,即UI随着数据改变,普通类型也行,如果要实现双向绑定就必须使用如ObservableInt、ObservableField<String>等类型,Androidstudio会有提示,根据需要选择。get()方法必须要注意方法名,最好利用Android studio自己生成,否则容易出错。set()方法随意。例如:
public class Account {
private ObservableField<String> userName = new ObservableField<>();
//private String userName;
//get()、set()方法
}
Activity类:例如 Login.java
Activity类和布局绑定如下,binding对象可以直接根据控件id使用控件,省去了findviewbyId的烦恼,布局里的account对象通过binding.setAccount(account)赋值,赋值之后就可以通过改变Activity类里的account的值直接改变UI了,无需再写代码去更新控件,方便靠谱省时间,例如:
public class Login extends Activity {
protected void onCreate(Bundle savedInstanceState){
//绑定布局, LoginBinding对象命名是布局+Binding,去掉下划线,单词首字母大写,Androidstudio会有提示
private LoginBinding binding = DataBindingUtil.setContentView(this, R.layout.login);
Account account = new Account();
binding. setAccount(account)//设置布局中account对象的值
account.setUserName(“小明”);
}
}
至于DataBinding的原理不难理解,编译后可以在build文件夹下寻找发现LoginBindingImpl文件,点开之后就可以看到自动生成的各控件的观察者,即MVVM里的view-model部分,如下是一个DataBinding的简单demo,便于初学者研究学习:
来源:CSDN
作者:HarryPotter_
链接:https://blog.csdn.net/HarryPotter_/article/details/104619286