モケラ

Tech Sheets

mokelab

データバインディングで変数を追加する

最終更新日:2022-05-08

データバインディングではレイアウトXMLに変数を追加することができます。

レイアウトXMLに変数を追加する

データバインディング用のレイアウトXMLを作るで作成したレイアウトXMLにname という変数を追加してみます。

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="name" type="String"/>
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/text_label_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginStart="8dp"
            android:textAppearance="?android:textAppearanceLarge"
            android:text="@string/name"/>
        <TextView
            android:id="@+id/text_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginStart="8dp"
            android:layout_below="@+id/text_label_1"
            android:text="@{name}"/>

        <TextView
            android:id="@+id/text_label_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/text_name"
            android:layout_marginTop="8dp"
            android:layout_marginStart="8dp"
            android:textAppearance="?android:textAppearanceLarge"
            android:text="@string/age"/>
        <TextView
            android:id="@+id/text_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginStart="8dp"
            android:layout_below="@+id/text_label_2"/>
    </RelativeLayout>
</layout>

の直下に を追加します。 の中に で、レイアウトに追加したい変数を定義します。ここでは単純なString 型の変数を定義します。

定義した変数は@{変数名} でViewの値として使用できます。ここではTextView の値として使用しています。もし変数がnull だった場合は値のセットは行われません。

変数に値をセットする

レイアウトXMLに変数を追加すると、自動でバインディングオブジェクトにsetterが追加されます。

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
     @Nullable Bundle savedInstanceState) {
    this.binding = MainFragmentBinding.inflate(inflater, container, false);
    // setterが作られている        
    this.binding.setName("moke");
    return binding.getRoot();
}

一覧に戻る