Bindingについてオッス!おらタイン!ということで、今回はAndroidの開発者向けに便利なアーキテクチャのお話をすっかんな。(オラわくわくしてきたぞ!)アーキテクチャパターン特定のシステムを実装する為に、どのようなクラスがあるか?お互いにどのように相互作用するか?を説明する為の一連のルールであります。一般なアーキテクチャのパターンは下記の通りです。Bindingを使用して、MVVMを実装する方法を紹介したいと思います。BindingライブラリーはModelViewに宣言しているObservableフィルードをTextViewやImageViewなどUI要素をバインドして、ViewとViewModelの間に双方向で実行出来ます。Bindingライブラリーを使用出来ます。Bindingライブラリーを使用するにはdataBindingをappモジュールのbuild.gradleファイルに次のように追加します。true}}ビルードプロセスをスピードアップし、ややこしいエラーを避ける為に、gradle.propertiesファイルに次のように追加してください。android.databinding.enableV2=true1android.databinding.enableV2=trueレイアウトとバインディング式レイアウトファイルはlayoutタグで始まり、data要素とルートviewが続きます。android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.lastName}"/></LinearLayout></layout>dataタグにuser変数はビューを使用できるデータオブジェクトです。データオブジェクトレイアウトにデータオブジェクトを使用するには、dataタグの中に変数として宣言する必要があります。レイアウトにuser.firstnameを宣言すれば、ライブラリーはuserオブジェクトにfirstnameフィルード、getFirstname()またはfirstname()メソッドをアクセスします。バインドデータライブラリーはルートタグlayoutを持つレイアウトファイル毎に自動的にバインドディングクラスを生成します。バインドディングクラス名はデフォルトでレイアウトファイルの名前を基づいてパスカルケースに変換され、接尾辞にBindingを追加します。次のように例を出します。ItemUserBinding.java以下はバイディングデータを実装する為の例です。RecyclerViewのアダプタでデータバインディングを使用している場合は、以下のメソッドを使用出来ます。false);イベント処理ライブラリーはonClickイベントなどビューから送られたイベントを処理する式を記述することができます。イベントを処理するには、次の二つの方法があります。構文はこれまで実装しているandroid:onClickと同じですが、ライブラリーは実行タイミングではなくコンパイルタイミングに処理メソッドを有効かどうかチェックします。エラーがある場合、コンパイルエラーを返します。レイアウト内にメソッドのシグネチャはリスナーオブジェクト内のメッソッドのシグネチャと一致する必要があります。シグネチャとはメッソッド名、パラメータ一覧とパラメータタイプです。リスナーのバイディングビューから送られたイベントタイミングにバインディング式を評価します。リスナーしているイベントにはvoidではないデータ型を返す場合、バインディング式も同じデータ型を返す必要があります。次のように例を出します。レイアウトファイルの外にあるクラスを参照するようにします。次の例ではTextUtilsクラスをレイアウトファイルにインポートします。パケッジが異なる同じクラス名の多くのクラスにクラス名の競争を回避する為に、エイリアスが必要です。データオブジェクトは含まれているレイアウトに渡すことができます。layout="@layout/contact"bind:user="@{user}"/></LinearLayout></layout>ObservableオブジェクトObservableは、observerパータンにおけるobserverを登録・解除、observerに自分のデータ変更がある際に通知することができます。ライブラリーでは、フィールド、オブジェクトまたはコレクションをObservableにする2つの方法があります。ビルドインObservableクラスを使用するObservableインタフェースを実装するビルドインObservableクラスを使用する次のようにライブラリーがビルドインObservableクラスを提供しています。flase)メソッドを呼び出すことでビューを自動的に更新する為に、通知することができます。Observableインタフェースを実装するObserableインタフェースは手動でリスナーを登録・解除、通知することができます。されに簡単にしる為に、BaseObservableインタフェースを実装するべきです。GetterメソッドにBindableアノテーションを使用し、setterメソッドにnotifyPropertyChanged()を呼び出すことで、Observableオブジェクトにすることができます。username;notifyPropertyChanged(BR.username);}}コンパイルする際にBindableアノテーションがあるものに該当するBRファイル内に一つのIDを生成します。バインディングアダプタバインディングアダプタは、属性のデータが変更された際に新しいデータを属性に設定する為に、該当なsetterメソッドを呼び出します。example属性の場合、ライブラリは自動的にsetExample(arg)メソッドを検索し、exampleのデータが変更した時に新しいデータをexample属性に設定します。ライブラリーは自動的にデフォルードのsetterメッソッドを呼び出すか、置き換えるsetterメソッドを呼び出すか、またはデフォルードのsetterメッソッドを上書くロッジックをすることができます。置き換えるsetterメソッドを指定するsetterメソッドは属性名と一致しない場合もあるのでその時、置き換えるsetterメソッドを指定する必要があります。その時、BindingMethodsアノテーションを使います。android:tint属性におけるsetTintのsetterメソッドはないが、setImageTintListsetterメソッドがあります。置き換えるsetterメソッドはライブラリーがほぼ設定してもらっていますので、必要ではない限り、やらない方法がいいです。カスタムロジックたとえば、インターネットから画像をロードしてビューに表示するなど、希望に合わせてバインディングロジックをカスタマイズすることができます。{ImageLoader.load(url).into(view);}注意:コンフリクトが発生した場合、定義したバインディングアダプターはデフォルトのバインディングアダプタを上書きします。双方向データバインディングデータリソースの変更がある際にビューを更新します。一方で、ビューの状態の変更がある際にデータリソースに反映します。双方向データバインディングにする為に、@の後に=が必要です。ObservableBoolean();ObservableオブジェクトにOnPropertyChangedCallbackリスナーを登録することで、Observableオブジェクトのデータが変更する際に、カスタマロジックをはめることができます。次の例のように、ユーザー名、パスワード、およびチェックボックスをすべて入力される場合、ログインボタンを有効になります。{mNavigator.gotoMain();}}}デモプロジェクトも作成しました。