DataBinding用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/codeaftercode/article/details/51619579

1.新建工程。要使用DataBinding,要求Android 的Gradle插件版本不低于 1.5.0-alpha1

classpath 'com.android.tools.build:gradle:1.5.0'

2.在Module的 build.gradle的android{ ...  }里增加一个插件:

dataBinding{ enabled true }

3.添加一个数据对象。以User类为例,User.java内容为:

public class User {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
4.布局文件。

4.1必须以<layout>为顶层视图,其他视图都要放在<layout>里。命名空间也写在<layout>里。

<layout xmlns:android="http://schemas.android.com/apk/res/android">
	<RelativeLayout
        	android:layout_width="match_parent"
       		android:layout_height="match_parent"
	        android:paddingBottom="@dimen/activity_vertical_margin"
       		android:paddingLeft="@dimen/activity_horizontal_margin"
	        android:paddingRight="@dimen/activity_horizontal_margin"
        	android:paddingTop="@dimen/activity_vertical_margin">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World" />
    </RelativeLayout>
</layout>
4.2现在开始定义变量。方法是在<layout>下,添加一对<Data></Data>标签,在此标签内,定义一个变量。

<data>
    <variable name="user" type="com.example.coder.myapplicationdatabinding.User" />
</data>
其中name="user",是我们为这个变量取的名,在此布局文件中可以用这个名字代表type中所定义的类。type="...",要写全名。

扫描二维码关注公众号,回复: 6016514 查看本文章

4.3修改需要用到User的控件。例如:在<TextView>里显示User类的name.只需要把android:text="Hello World"改成:

android:text="@{ user.name  }" />
完整的布局文件内容为:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data><variable name="user" type="com.example.coder.myapplicationdatabinding.User" /></data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{ user.name }" />
    </RelativeLayout>
</layout>
5.终于来到最后一步,绑定变量。

在不使用 DataBinding的情况下,接下来要做的就是修改Activity的onCreate()方法,先后用setContentView()、findViewById()、settext()等方法逐个获取控件ID、设置控件内容。现在使用DataBinding就不用这么烦琐。在上一步布局文件设置完成后,我们刚才在 build.gradle 中添加的那个插件-com.android.databinding 会根据 xml 文件的名称 Generate 一个继承自   ViewDataBinding 的类。 当然,IDE 中看不到这个文件,需要手动去 build 目录下找(工程名\app\build\intermediates\data-binding-layout-out\debug\layout)。例如,这里 xml 的文件名叫 activity_main.xml,那么生成的类就是ActivityMainBinding。

现在正式开始修改代码,只需增加2行。转到布局文件对应的Activity.java文件,用DataBindingUtil()方法替换掉setContentView()方法,其返回值为上面提到的自动生成的ActivityMainBinding类的一个实例;对返回的实例进行初始化设置。代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    binding.setUser(new User("张",20));
}
注意:自动生成的这个类,其实不一定要到build下寻找,它的命名是很有规律的,基本上是和布局文件名相同的,只需要打几个字母就能在Android Studio的提示里找到。这个类是自动生成的,同时这个类还会生成set方法,方法名则是根据variable名称生成的。在布局文件中定义了一个name="user",这个类就会生成setUser()方法,其参数必须为type="..."所规定的类型。我们在Activity中就可以利用这个方法对控件进行绑定。

完毕,可以编译运行了。关于DataBinding的高级用法还很多,以后慢慢体会。

参考资料:https://github.com/LyndonChin/MasteringAndroidDataBinding



猜你喜欢

转载自blog.csdn.net/codeaftercode/article/details/51619579