DataBinding的应用需要在android4.0(API14)及以上版本
首先需要在build.gradle文件中配置环境
android {
...
dataBinding {
enabled = true
}
}
正常DataBinDing绑定到xml中的数据格式是,以layout标签为根,首先添加data标签,绑定数据,代码如下:【代码来源】
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
其中data中的变量标签的名称user是自定义的,type类型是必须实际存在的实体类,在TextView中的引用就是以@{}包裹的方式
在Activity中DataBinding调用xml有两种方式,一种是通过DataBingdingUtil调用xml文件名:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);
}
第二种是直接通过LayoutInflater隐式的生成:
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
第三种:如果View已经被生成,需要重新绑定到Binding时可以调用如下:
MyLayoutBinding binding = MyLayoutBinding.bind(viewRoot);
如果是在Fragment、ListView、Recyclerview中则可以通过以下两种方式调用:
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
注意:DataBinding绑定xml并自动生成Bingding文件的名称,是根据你定义xml文件的文件名称自动生成的,例如:你定义了一个activity_main.xml的文件,那么自动绑定完成之后生成的Binding文件名就是ActivityMainBinding.java