データバインディングで変数を追加する
最終更新日: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();
}