モケラ

Tech Sheets

mokelab

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

最終更新日:2017-06-10

データバインディングではレイアウト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>

<layout>の直下に<data>を追加します。<data>の中に<variable>で、レイアウトに追加したい変数を定義します。ここでは単純な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();
}

一覧に戻る