最近ちょこちょこと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つ。
- ルートタグとして<layout>を使うこと
- <layout>タグの直後に<data>要素を記述すること
- <data>要素の中に<variable>要素を指定し、バインドしたいクラスを指定すること
- バインドしたクラスのフィールドを指定するには@{}構文を使用すること
あとは次のようなコードを記述すれば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を使っていこうと思う。