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编译器中的错误
- Android数据绑定与Kotlin,BaseObservable和一个自定义委托
- Kotlin:Java利用日期到数据绑定的字符串
- android数据绑定单元测试错误解析数据绑定编译器选项失败。 PARAMS:
- Android DataBinding:Kotlin中的@BindingAdapter不识别lambda表达式
- 无法将硬编码的字符串值传递给Kotlin中的@BindingAdapter
- android-kotlin错误:未解决的引用databinding&ActivityMainBinding
- 在android中使用数据绑定在android:src中为ImageView设置drawable资源ID
- 使用Kotlin进行数据绑定会导致Resources $ NotFoundException
- 如何覆盖kotlin的setter方法?