Kotlin自定义属性数据绑定

我想在我的Kotlin项目中使用Android DataBinding库设置自定义属性,如下所示:

布局

<ImageView android:id="@+id/imgView” android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center" android:adjustViewBounds="true" app:imageUrl="@{segment.url}"/> 

  class Utils { companion object { @BindingAdapter("bind:imageUrl") @JvmStatic fun loadImage(view: ImageView, url:String) {Picasso.with(view.context).load(url).error(R.drawable.error).into(view)} } 

我得到的运行时错误是:

in中的BindingAdapter不是静态的,需要使用从DataBindingComponent中检索的对象。 如果您不使用采用DataBindingComponent的通胀方法,请使用DataBindingUtil.setDefaultComponent或使所有BindingAdapter方法都是静态的。

任何指针来解决它?

这只发生在自定义属性上。 其余的数据绑定工作正常

只需保持顶层的功能,不需要类或伴侣对象

 @BindingAdapter("imageUrl") fun loadImage(view: ImageView, url:String) { ... } 

尝试切换注释的顺序。 它似乎解决了这个问题:

 class Utils { companion object { @JvmStatic @BindingAdapter("imageUrl") fun loadImage(view: ImageView, url:String) { ... } } } 

问题是databindng编译器使用getCompanion().loadImage否则getCompanion().loadImage *
您可以在生成的com.your.package.databinding.*Binding类中进行验证

*玩了一下后,我注意到这与注释的顺序无关,但似乎是随机的。 每当我点击“重建”,似乎都会改变。 这可能是kapt或kotlin编译器中的错误