以前我们可能需要在每个Activity里写很多的findViewById,不仅麻烦,还增加了代码的耦合性,如果我们使用DataBinding,就可以抛弃那么多的findViewById,省时省力。说到这里,其实网上也有很多快速的注解框架,但是谷歌官网文档说DataBinding除了省去findViewById还能提高解析XML的速度,其实DataBinding的好用,不仅仅体现在可以省去使用很多啰嗦findViewById,还有很多好处,相当于也是借鉴了web开发的一些有点设计的,但是他也有劣势的比如使用 Data Binding 会增加编译出的 apk 文件的类数量和方法数。
要引入它,我们的Android 的 Gradle 插件版本不低于 1.5.0-alpha1:
classpath 'com.android.tools.build:gradle:1.5.0'
然后修改对应模块(Module)的 build.grade:
android {
....
dataBinding {
enabled = true
}
}
这里简单介绍下使用:
首先我们先建立一个java bean,就是一个非常简单的用户类吧。
package loonggg.net.databinding.bean;
/**
* Created by loongggdroid on 2016/3/14.
*/
public class User {
private String name;
private String age;
public User(String name, String age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return this.name;
}
public String getAge() {
return this.age;
}
}
其次,来看看使用了DataBinding之后的布局文件是什么样子的呢?主要的变化是在layout布局文件之中。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="loonggg.net.databinding.bean.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.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.age}" />
</LinearLayout>
</layout>
在Activity中是如何使用的呢?如下:
package loonggg.net.databinding;
import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import loonggg.net.databinding.bean.User;
import loonggg.net.databinding.databinding.ActivityMainBinding;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("loonggg", "23");
binding.setUser(user);
}
}
看到Activity是不是感觉很简洁,很清爽,没有了控件的初始化findViewById,然后再去setText(), 就仅仅只添加了两行代码。
布局文件中相比以前使用的xml,根节点由具体的某个layout(比如LinearLayout )变成了layout,里面包括了data节点和传统的视图。这里的data节点就像是连接 View 和 Modle 的桥梁。在这个data节点中声明一个variable变量,那值就可以轻松传到布局文件中来了。
变量名为user
变量类型为”loonggg.net.databinding.bean.User “
type中声明的就是我们的用户实体类User,一定要写全,带着包名,我们给这个实体类命名为user,TextView中的@{user.name}就是把这个user中的名字展示出来,age同样如此。
在activity中修改MainActivity中的onCreate,用 DatabindingUtil.setContentView() 来替换掉 setContentView(),然后创建一个 user 对象,通过 binding.setUser(user) 与 variable 进行绑定。
这只是最简单的基础用法,更为高级的用法像在recyclerview中使用,等有时间了再继续研究。(一开始接触,感觉非常难用,和注解的相比很麻烦,但是习惯是随着时间改变的。)
–>路要一步一步走,记住自己走过的路,不再犯同样的错误,才是真正的成长!欢迎指点、交流。<–