一、基本介绍

DataBinding数据绑定库是一种支持库,借助该库,可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。这是官方给出的介绍。

那么为什么要使用DataBinding?

首先,再也不需要使用findViewById()来初始化控件了;

另外,更新UI不再需要切换到UI线程,而是可以通过数据分解映射到各个View。

 

二、学习教程

https://developer.android.com/topic/libraries/data-binding

 

三、使用示例

 在build.gradle中android闭包中添加配置,即可使用DataBinding库:

  dataBinding {
        enabled = true
    }

之后可以在activity_main.xml中添加如下布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="user"
            type="com.cy.test.mvvmdatabinding.UserBean" />
    </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}" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(user.age)}" />
    </LinearLayout>
</layout>

首先需要注意几个地方:

1、最外层节点为layout

2、添加了data标签,variable顾名思义即变量,指向与该布局对应的数据源,name即变量名,type即是变量类型UserBean,这个变量就是可以与布局当中的每个View一一对应的数据源。

3、text中可以使用text="@{user.name}"直接引用UserBean中的值。

MainActivy.java中的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        UserBean userBean = new UserBean ("张三", 25);
        binding.setUser(userBean );

    }
}

原有的setContentView(R.layout.activity_main)被注释掉了,

取而代之的是ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

DataBindingUtil是库中的一个类,setContentView(this, R.layout.activity_main)将布局传入,

然后生成一个ViewDataBinding类,ActivityMainBinding继承于ViewDataBinding,初次写入可能会报错,编译以后就可以引入这个类ActivityMainBinding,它通过引入布局文件名称生成。

运行结果如下:

更多思考之后整理吧~~~