Android官方DataBinding简例(一)
(1)使用谷歌Android官方DataBinding,需要首先在module的gradle里面启用:
android {
...
dataBinding {
enabled = true
}
...
}
配置完成后记得update gradle,刷新工程。
package zhangphil.test;
/**
* Created by Phil on 2017/8/17.
*/
public class User {
private String id;
private String name;
private String blog;
public User(String id, String name, String blog) {
this.id = id;
this.name = name;
this.blog = blog;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setBlog(String blog) {
this.blog = blog;
}
public String getBlog() {
return this.blog;
}
}
(3)Android DataBinding和以往编程模型不同的是,需要在Android 布局里面直接给定。在过去,假如我需要在一个垂直线性布局使用三个TextView显示id,name,blog,那么现在新的做法是引入一个layout,在这个根layout里面,把数据容器bean(本例是User)和TextView直接绑定:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="zhangphil.test.User" />
</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.id}"
android:textColor="@android:color/holo_red_light" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
android:textColor="@android:color/holo_red_light" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.blog}"
android:textColor="@android:color/holo_red_light" />
</LinearLayout>
</layout>
可以看出和过去的布局写法没有太大不同,只是用了一个layout包括一层,引入一个data元素结点,variable“注入”我们要和当前View绑定的数据模型(model)。注意看到在TextView定义android:text属性文本值时候,使用的特别注解符号和形式。
(4)以上完成后,就可以直接在上层Java代码直接用ActivityMainBinding像胶水一样把User bean模型和View绑定在一起:
package zhangphil.test;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import zhangphil.test.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private String name = "zhangphil";
private int id = 1;
private String blog = "http://blog.csdn.net/zhangphil";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User(String.valueOf(id), name, blog);
binding.setUser(user);
}
}
注意:ActivityMainBinding由Android studio自动生成,简单起见,本例不需由开发者维护。
代码运行结果: