情報は力ではない

UE4 とか Blender とか。

Android Data Bindingを使ってみた。

最近ちょこちょことtechbooster.fmを聞いているのですが、第11回でDataBindingの話をしていて、その存在を知ったのでちょっと使ってみた。
詳しい使い方についてはData Binding Guide | Android Developersに詳しく書いている(はず)です。まだ読んでないです。
以下で出てくるコードはこのサイトに載っているコードです。

準備

appモジュールのbuild.gradleにdataBinding要素を追加する

android {
  ...
  dataBinding {
    enabled = true
  }
}

これだけです。

使い方

DataBindingをするにはlayoutファイルを次のように記述するとcom.example.UserクラスのfirstNameフィールドがTextViewにバインド?される。

<!-- res/layout/main_activity.xml -->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
  <data>
    <variable name="user" type="com.example.User"/>
  </data>
  <LinearLayout
    ...>
    <TextView ...
      android:text="@{user.firstName}"/>
  </LinearLayout>
</layout>

重要な点は4つ。

  1. ルートタグとして<layout>を使うこと
  2. <layout>タグの直後に<data>要素を記述すること
  3. <data>要素の中に<variable>要素を指定し、バインドしたいクラスを指定すること
  4. バインドしたクラスのフィールドを指定するには@{}構文を使用すること

あとは次のようなコードを記述すればDataBindingが行われる。

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
  User user = new User("Test", "User");
  binding.setUser(user);
}

ここで出てくるMainActivityBindingクラスはDataBindingライブラリによってコンパイル時に作成されるクラスです。
先ほど、main_activity.xmlを書いたのでMainActivityBindingクラスが生成されています。
このBindingクラスの名前はlayoutファイル名をキャメルケースしたものの末尾にBindingという文字列をくっつけた名前になります。
例えばlayoutファイルの名前がitem_view.xmlであればItemViewBindingクラスが生成されることになります。

感想

すごく簡単にしか使ってないけど、結構便利そう。
下の動画でも言っているけど、RecyclerViewを使うときのAdapterやHolderの記述が簡潔に書ける。

www.youtube.com
他のDataBindingライブラリとしてButterKnifeの存在は知っていたけど、なんとなく使うのを面倒に感じていて今まで使っていなかった。
今回のtechbooster.fmがDataBindingを使うきっかけになりました。非常に感謝です。
これからも少しずつDataBindingを使っていこうと思う。