DataBinding系列一、绑定数据到view

为什么要使用data binding

google说它可以最小化业务代码和UI之间的工作量,事实上也确实如此,它的原理是在xml中写UI代码,对view的属性进行表达式求值实现动态数据。

配置要求

  1. Android 2.1 (API level 7+)
  2. gradle plugin 1.5+
  3. Android Studio 1.3 +

导入项目

在app module的build.gradle中加入

    dataBinding {
        enabled = true
    }

注:如果有其他模块使用了dataBinding,那么在app module中也同样要加入。

基本使用

使用一个简单例子来了解基本使用方法,例子是绑定数据到view上面显示。

1.修改布局文件

为用于数据绑定的布局文件和通常的不一样,它需要用layout节点作为根节点,并且后面紧跟data节点


<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
    
        <variable
            name="user"
            type="com.heyy.databingexample.User" />
    data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{user.name}"/>
    LinearLayout>
layout>

2.定义数据对像类型

对应布局文件中定义的variable,实现数据对像类型User。
view有三种从数据对像中获取数据的方法,如下:

public class User {
    public final String name; //优先级第三,直接使用属性名

    public User(String name) {
        this.name = name;
    }

    //优先级第一,get方法
    public String getName() {
        return "0"+name;
    }

    //优先级第二,属性名方法
    public String name(){
        return "1"+name;
    }
}

3.绑定数据到view

这个简单点直接在onCreate中绑定就好了

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里删除了原来的setContentView方法,使用了新的方法
        //DataBindingUtil.setContentView创建了一个ViewDataBinding,后面可以用来设置数据
        //ActivityMainBinding是自动生成的,命名规则和xml名称有关系,比如activity_main.xml会产生ActivityMainBinding
        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        //创建一个数据
        User user = new User("he");
        //将数据绑定到view
        activityMainBinding.setUser(user);
    }

编译错误

如果项目中出现如下错误:

Error:(7, 47) error: package com.heyy.databindingexample.databinding does not exist

那么需要检查一下是否使用了android-apt插件,如果使用了请确保版本在1.5+

你可能感兴趣的:(Android,android)