Butter KnifeとさよならしてData Bindingと付き合うことにした

こんにちは、Androiderの梅津です。

以前 [Android]Data BindingがButterKnifeの代わりになるのか試してみる という記事でData Bindingの紹介をしました。
この時はButter KnifeからData Bindingに乗り換えるか迷っていたんですが、結局乗り換えることにしました。

今回は何故乗り換えることにしたのかをお話ししたいと思います。

動機

実は乗り換えることにした一番の理由は、この前の記事に書いてあります。
【良いところ】 
* ViewのBindはすごく使いやすい!
* 特にViewを直接フィールドとして持つわけではないのでレイアウトの変更に強いのが良い。
* ButterKnifeを使っている時、xml側で型の変更をしたりViewの削除をしたのにActivity/Fragment側の更新を忘れて実行時エラーになることがあった。
* Data Bindingの場合はActivity/Fragment側でコンパイルエラーになってくれたり、そもそも変更が必要なかったりするので嬉しい。  
このレイアウトの変更に強いことがData Bindingを使う一番の利点じゃないでしょうか。

Data BindingはAnnotation Processingを使っているため、実行時エラーがありません。
これによって本当に気持ちが楽になりました。コンパイル時にエラーがわかるって素敵ですね。
(このQiitaの記事によるとButter KnifeもAnnotation Processingに切り替えるみたいですね)

 


運用ルール

Data Bindingはxml側にも色々と書けてしまうので、気をつけないとどこに何が書いてあるのかわからなくなりそうです。
そこで次のようなルールを決めて使うことにしました。

  1. ViewのBindにのみ利用する
  2. リスナーのBindはjava側で行う 
あくまでもButter Knifeの代わりに使いたかったので、このようなルールにしました。

ViewのBindだけ行いたいのでxmlの中では<layout>タグだけを使い、
<data>タグや<variable>タグを一切使わないようにしています。


またButter Knifeを使っていたときはリスナーのBindも行っていたため、setOnClickListenerを呼ぶような記述が増えてしまいましたが、今のプロジェクトではRetrolambdaを使っていることもあり見た目にも大きな影響はありませんでした。




まとめ

このくらいの使い方だとData Bindingの影響範囲は少なく、学習コストも低くすむのでオススメです。
是非Butter Knifeの代わりに使ってみてはいかがでしょうか。

以上、お疲れさまでした。