Fundamentals Of The Data Binding

Androidアプリケーションを開発していると冗長な記述を要求される場面によく出くわします。レイアウト内のViewの操作もそのひとつでしょう。レイアウトをinflateした後にfindViewById()などでViewを取り出し(しかもキャストまでしなくてはいけません)、必要なデータやスタイルをセットしたり状態に合わせて表示/非表示の変更をしたりしなければなりません。またActivityやFragmentなどの状態が変わったとき、Viewを動的に更新するにはコード上でViewの操作をするしかありません。たちまちView操作の為のコードがそこら中に溢れかえるでしょう。

こうした状況の中登場したのがRoboGuice*1やButterKnife*2などのView Bindingを提供するライブラリ達です。これらのライブラリを用いると、Viewのフィールドを定義すると同時にレイアウトのどのViewをフィールドにバインドするかを指定できるようになります。これによってfindViewById()でViewを取り出す処理を省略できるようになりました。

View Bindingによって負担は軽減されましたが、View操作の為に沢山のロジックを書かなければならない問題は解決していません。また、View Bindingの為にフィールドを定義したり、ViewHolderを作成することが冗長であることに変わりありません。また、このアプローチはViewとidのマッピングを明示的に記述するのでレイアウトの変更に弱いという側面も持ちます。

Google I/O 2015で発表されたData Binding Libraryはこれらの問題をあらかた解決してくれます。詳細は後述しますが、Data Binding Libraryを導入することで次の恩恵が受けられます。

  • ViewHolder Pattern*3の代わりに使うことができ、ViewHolderの実装が不要になる
  • Layout XML上で変数の宣言と利用ができるようになり、Viewへのデータのセットを自動化できる
  • View操作をData Binding Libraryに委譲できるので、プレゼンテーションとドメインを切り離した設計がしやすくなる

本章では公式ドキュメントであるData Binding Guide*4を網羅的に触れつつ、Data Binding Libraryの活用方法について解説していきます。本章を執筆した時点ではData Binding LibraryはまだBetaリリースの状態です。本章で記述している内容と正式版の内容が異なる場合がありますのでご注意ください。