【Android】DataBindingサンプルプログラム
DataBindingのサンプル
DataBindingを勉強して、シンプルなサンプルを作って動かしたので、備忘録がわりにメモします。
dataBindingを有効にする
モジュールのbuild.gradle
1 2 3 4 5 6 7 8 |
android { ・・・(中略)・・・ dataBinding { enabled = true } ・・・(中略)・・・ } |
レイアウトファイルを記載する
activity_main.xml
※xmlファイルのルートをlayoutタグにする。
※dataタグにバインドするクラスを記載する。
※TextViewタグウィジェットの@{user.name}がdataBindingされる部分。userクラスのnameがバインドされる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.kussuue.testdatabinding.MainActivity"> <data> <!-- Userクラスにバインド--> <variable name="user" type="com.kussuue.testdatabinding.User"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="8dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.name}" android:textAppearance="@style/TextAppearance.AppCompat.Medium"/> </LinearLayout> </layout> |
バインドされるクラスの実装
Userクラス
※ObservableFieldを使うことで、値に変更があった際にバインド先のレイアウトを変更してくれる。
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.kussuue.testdatabinding; import android.databinding.ObservableField; public class User { public ObservableField<String> name = new ObservableField<>(); public User(String nameString) { name.set(nameString); } } |
MainActivityの実装
MainActivity.java
※DataBindingUtil.setContentViewメソッドにてBindingオブジェクトを取得する。
※ActivityMainBindingが自動生成される。
※Userインスタンスを設定。
※ActivityMainBindingが自動生成されない(コード内でエラー表示 もしくはビルドの際 not found となった)際は、これまでの設定を見直す。
それでも解決しない場合はAndroidStudio再起動。
すると「import android.databinding.DataBindingUtil;」されるのでエラーが消える もしくはコードを書き直すと解決する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.kussuue.testdatabinding; import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.kussuue.testdatabinding.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Bindingオブジェクトを取得 ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); // BindingオブジェクトにUserをセット binding.setUser(new User("Ichiro")); } } |
公式ドキュメント
https://developer.android.com/topic/libraries/data-binding/?hl=ja