LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

サマリ

簡単に書くと、自動で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を呼ぶに決まってんじゃーん!」と思い込んでたのでハマりました。ご注意ください。

以上です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1