Edited at

Kotlin + DataBindingでカスタムセッターを作る

More than 1 year has passed since last update.

@BindingAdapterを使ってカスタムセッター作るには、staticなメソッドを作る必要があります。

Kotlinでは object 指定でクラスを作ったり、companion objectで括ることでstaticメソッドをつくれますが、この方法でカスタムセッターを作ってもビルドできませんでした。

これは次のように定義することで解決できました。

キモは object 指定でクラスを作ることと、メソッドに@JvmStaticを追加することです。

object ImageViewBindingAdapter {

@BindingAdapter("bind:imageUrl")
@JvmStatic
fun loadImage(view: ImageView, url: String) {
Glide.with(view.context).load(url).into(view)
}
}

ちなみに次のような感じでcompanion object を使った場合はと言うと

class ImageViewBindingAdapter {

companion object {
@BindingAdapter("bind:imageUrl")
@JvmStatic
fun loadImage(view: ImageView, url: String) {
Glide.with(view.context).load(url).into(view)
}
}
}


DataBindingAttribute.Companion is not static and requires an object to use, retrieved from the DataBindingComponent.


と言われて実行時エラーで止まってしまいました。


参考



追記

Kotlinなら拡張関数を使う方が楽です。

@BindingAdapter("imageUrl")

fun ImageView.loadImage(url: String) {
Glide.with(this.context).load(url).into(this)
}