什么是DataBinding
Android 团队发布的一个数据绑定框架。开发者可以直接在 xml 文件中绑定数据,再也不用findViewById 然后再手工设置数据了。
1、打开DataBinding开关
2、编写DataBinding风格的布局文件
3、使用DataBinding
1、打开DataBinding开关
在项目的build.gradle里加入下面的代码即可。
dataBinding{
enabled = true
}
2、编写两个个测试用的类,Game.java和User.java
Game.java
package com.example.a96314.databindingtest;
/**
* Created by 96314 on 2016/8/8.
*/
public class Game {
private String name;
private String price;
public Game(String name, String price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public String getPrice() {
return price;
}
}
User.java
package com.example.a96314.databindingtest;
/**
* Created by 96314 on 2016/8/8.
*/
public class User {
private String name;
private String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
3、编写DataBinding风格的布局文件
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.example.a96314.databindingtest.User" />
<import type="com.example.a96314.databindingtest.Game"/>
<variable
name="user"
type="User" />
<variable
name="game"
type="Game"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.password}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{game.getName()}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{game.getPrice()}" />
</LinearLayout>
</layout>
上面是一个DataBinding风格的布局
首先看一下这个布局的结构
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import />
<variable/>
</data>
<LinearLayout
</LinearLayout>
</layout>
1、起始根标签是<layout>
2、接下来是一个<data>
元素
3、然后就是正常的布局<LinearLayout>
,这个布局就是我们没有使用Data Binding时候的根布局
详解:这个<data>
元素就是为了给布局里的一些控件赋值,是Data Binding的核心元素。在上面的布局文件中我们可以看到我们给TextView的text属性设置了如下的值:
android:text=”@{user.name}”
android:text=”@{user.password}”
android:text=”@{game.getName()}
android:text=”@{game.getPrice()}”
使用<import>
标签将需要绑定的类导入
使用<variable 标签设置数据
//导入的类名
name="user" //别名
type="User" />
使用 @{} 语法给textview控件设置值。设置值可以通过两种方式:
user.name 或者 user.getName()
写完<data>
标签以后,android studio会根据xml文件名生成一个对应的ViewDataBind类。例如:activity_main.xml就会生成ActivityMainBinding的类。
然后我们在主布局文件使用这个类来绑定数据
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("databinding Test", "user password");
binding.setUser(user);
User user2 = new User("databinding Test22", "user password22");
binding.setUser(user2);
Game game = new Game("call of duty", "110");
binding.setGame(game);
}
}
通过如下代码就可以将数据和View绑定:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("databinding Test", "user password");
binding.setUser(user);
以上就是DataBinding的简单用法,晚上回去再继续写事件绑定和listview的绑定。
代码下载: