Android
DataBinding

DataBindingで値を自動で画面へ反映する

サマリ

簡単に書くと、自動でBindしたい値のgetterに@Bindableアノテーションを付けて、View側で変数を指定してあげるだけです。

サンプルコード

Bindされるモデルクラス

SampleModelClass.java
public class SampleModelClass extends BaseObservable {
    private String text;

    @Bindable
    public String getString() {
        return text;
    }

    public void setString(String str) {
        text = str;
        notifyPropertyChanged(BR.text);
    }
}

extends BaseObservable

まずは1行目のextends BaseObservableです。
これをすることで、値に変更があったことを通知できるようになります。

@Bindable

getterクラスに@Bindableアノテーションを追加することで、値が変更された変数をBindできるようになります。

notifyPropertyChanged

setterクラスでこれを呼ぶことにより、値が変更されたことを実際に通知(notify)します。

View側

SmapleView.xml
<?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">

    <data>
        <variable
            name="model"
            type="net.furusin.www.sample.model.SampleModelClass" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{model.text}" />
    </LinearLayout>
</layout>

android:text="@{model.text}"

今回はTextViewにBindしてみます。
注意は
SampleModelClass#getString()を呼ぶのではなくSampleModelClass.textとメンバ変数を直接指定する」
ということです。

私は「値を取得するんだからgetterを呼ぶに決まってんじゃーん!」と思い込んでたのでハマりました。ご注意ください。

以上です。