レイアウトXMLでexample
という属性をバインディングした場合、setExample()
というメソッドが呼び出されます。
AndroidのDataBindingは非常に便利ですが、普段使わないUI要素を設定したくなった時に、XMLにどのように記述すればよいか迷うことが多いのではないでしょうか。このブログでも「BitmapをImageViewにbindingしたい」とか「DataBindingでViewの表示・非表示を切り替えたい」といった記事で個別のバインディング方法を紹介してきました。これらの記事へのアクセスが多いことからも、たくさんの人がDataBindingの書き方で迷っていることが分かります。
DataBindingできるプロパティやメソッドの一覧表とかあればいいのに・・・と思って調べてみると、実はDataBindingの記述方法はきちんとルールで決まっていました。それがこちら。
- Viewの
setXxxxx
というメソッド名からset
を取り除き、先頭を小文字にする。 - XMLの名前空間は何でもよい。
例えば「BitmapをImageViewにbindingしたい」では、app:imageBitmap
属性を使うと紹介しました。これは、ImageView
にsetImageBitmap()
というメソッドがあるから使えるのです。実は名前空間はapp:
でもandroid:
でも変わらないということなんですね。
「DataBindingで記述したいけどどうやって書けばいいかわからない!」という場合は、まずはAndroidデベロッパーでViewのメソッドを調べて、setXxxx
というメソッドが見つかったら、上記のルールに従ってset
を取り除いて先頭を小文字にすればよいことになります。setXxxxxListener()
のようなイベントリスナーの登録も同じルールが使えます。
一応公式のAndroidデベロッパーの記事も引用しておきましょう。
example という名前の属性の場合、ライブラリは引数として互換性のある型を受け入れる setExample(arg) メソッドを自動的に見つけようとします。メソッドの検索時には属性の名前空間は考慮されず、属性の名前と型のみが使用されます。
https://developer.android.com/topic/libraries/data-binding/binding-adapters?hl=ja#automatic-setting
DataBindingの書き方をググると、@BindingAdapter
アノテーションを使って自分で定義する方法を紹介している記事をよく見ますが、まずはViewに適切なメソッドが用意されているかどうかを調べましょう。setXxxx()
というメソッドがあれば、わざわざ自分で定義しなおす必要はありません。