Data Binding Library—基本使用

1.编译配置

在app模块的build.gradle增加dataBinding

android {
    ...
    dataBinding {
        enabled = true
    }
}

2.Layouts 和绑定表达式(Layouts and binding expressions)

Data binding layout与通常所用的文件有些差别,根标签是layout ,然后是data 和view 根元素。这个view 根元素就是通常用的layout

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="user"
            type="com.caicai.databinding.User"/>
    </data>
    <!-- UI 布局根元素 -->
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}"
            app:layout_constraintHorizontal_chainStyle="spread"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/gender"
            />

        <TextView
            android:id="@+id/gender"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toRightOf="@id/name"
            app:layout_constraintRight_toRightOf="parent"
            android:text="@{user.gender > 0 ?@string/female: @string/male}"
            />
    </android.support.constraint.ConstraintLayout>
</layout>

android:text="@{user.name}"表达式Data binding库根据 user.getName()的返回值类型找setText(arg)方法。如果返回值是String类型,就会找到接收String参数的setText()方法;如果返回int类型,就会找到接收int 参数的setText()方法。所以表达式必须要返回正确的类型。

3.数据(Data object)

package com.caicai.databinding;

public class User {
    private String name;
    private int gender;

    public String getName() {
        return name;
    }
    public int getGender() {
        return gender;
    }

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

4.绑定数据(Binding data)

每一个layout文件都会生成一个binding 类。类的名称是根据layout的名字转换并添加Binding前缀:如activity_main.xml,生成的类是ActivityMainBinding。
推荐初始化layout的时候创建绑定,如下所示:

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("pinkcat", 1);
        binding.setUser(user);

    }
}
    原文作者:粉色小猫与蓝色小妖
    原文地址: https://www.jianshu.com/p/58db79f516fb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞