Data Binding Library—基本使用

1.編譯配置

在app模塊的build.gradle增加dataBinding

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

2.Layouts 和綁定表達(dá)式(Layouts and binding expressions)

Data binding layout與通常所用的文件有些差別,根標(biāo)簽是layout ,然后是data 和view 根元素。這個(gè)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}"表達(dá)式Data binding庫(kù)根據(jù) user.getName()的返回值類型找setText(arg)方法。如果返回值是String類型,就會(huì)找到接收String參數(shù)的setText()方法;如果返回int類型,就會(huì)找到接收int 參數(shù)的setText()方法。所以表達(dá)式必須要返回正確的類型。

3.數(shù)據(jù)(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.綁定數(shù)據(jù)(Binding data)

每一個(gè)layout文件都會(huì)生成一個(gè)binding 類。類的名稱是根據(jù)layout的名字轉(zhuǎn)換并添加Binding前綴:如activity_main.xml,生成的類是ActivityMainBinding。
推薦初始化layout的時(shí)候創(chuàng)建綁定,如下所示:

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);

    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容