【发布时间】:2018-08-16 11:10:21
【问题描述】:
我曾经创建 DataBindingAdapter 用于在数据绑定中创建自定义 xml 属性。
object DataBindingAdapter {
@BindingAdapter("android:src")
fun setImageByRes(imageView: ImageView, @DrawableRes resId: Int) {
imageView.setImageResource(resId)
}
}
它运行良好 在 Java 中。 但不起作用 在 kotlin 中。
据我了解,kotlin 中的对象类似于 Java 的静态方法。但它不适用于数据绑定。
java.lang.IllegalStateException:FragmentBottomBarBinding 类中必需的 DataBindingComponent 为空。中的 BindingAdapter acr.browser.lightning.utils.DataBindingAdapter 不是静态的并且 需要使用从 DataBindingComponent 检索的对象。如果 您不使用采用 DataBindingComponent 的通胀方法,请使用 DataBindingUtil.setDefaultComponent 或制作所有 BindingAdapter 方法 静态的。
【问题讨论】:
-
你试过
@JvmStatic注解setImageByRes。 -
如果您遇到互操作问题(Java 调用 Kotlin 代码),一个好的方法是将生成的字节码反编译为 Java 并查看结果如何。这通常可以立即明确接口不匹配的位置。
-
@Moinkhan JvmStatic 成功了。
-
你忘了@JvmStatic
-
因为你没有回答,所以我做了你的工作。你现在可以回答了。我会正确地标记它,你应得的。
标签: android kotlin android-databinding