Khe*_*raj 2 android kotlin android-databinding
我曾经创建DataBindingAdapter用于在数据绑定中创建自定义xml属性的创建。
object DataBindingAdapter {
@BindingAdapter("android:src")
fun setImageByRes(imageView: ImageView, @DrawableRes resId: Int) {
imageView.setImageResource(resId)
}
}
Run Code Online (Sandbox Code Playgroud)
在Java中运行良好 。但不能在科特林工作。
据我了解,kotlin中的对象类似于Java的静态方法。但是它不适用于数据绑定。
java.lang.IllegalStateException:必需的DataBindingComponent在类FragmentBottomBarBinding中为null。acr.browser.lightning.utils.DataBindingAdapter中的BindingAdapter不是静态的,需要使用从DataBindingComponent检索的对象。如果您不使用带DataBindingComponent的膨胀方法,请使用DataBindingUtil.setDefaultComponent或将所有BindingAdapter方法设为静态。
Moi*_*han 11
只需@Jvmstatic在setImageByRes方法上添加注释。
object DataBindingAdapter {
@BindingAdapter("android:src")
@JvmStatic
fun setImageByRes(imageView: ImageView, @DrawableRes resId: Int) {
imageView.setImageResource(resId)
}
}
Run Code Online (Sandbox Code Playgroud)
根据@Jvmstatic 文档
指定如果此元素是函数,则需要从此元素生成其他静态方法。如果此元素是属性,则应生成其他静态getter / setter方法。
在一个地方声明的简短方法,可从JVM的多种语言使用。如果从Java调用方法,则应将其声明为@JvmStatic,因为在一个位置添加@JvmStatic批注将使您可以在多个位置省略多个.Companion引用。
不。kotlin 中的对象与单例相同。我认为你不需要把它放在 Object. 只需创建新文件,您就BindingAdapters.kt不需要编写任何类或对象关键字。
它应该是这样的。没有其他的。如果您需要更多功能,只需将其添加到此功能下方即可。同样不需要 class 关键字或括号。它将是全局函数。也许ü还应使用ContextCompat用于获取resource与上下文正确imageView。我宁愿将其命名为与android:src不同的名称。imageResBinder 怎么样
@BindingAdapter("imageResBinder")
fun setImageByRes(imageView: ImageView, @DrawableRes resId: Int) {
imageView.setImageResource(resId)
}
Run Code Online (Sandbox Code Playgroud)
然后在你的.xml文件中
<android.support.v7.widget.AppCompatImageView
style="@style/Image.SomeImageStyle"
app:imageResBinder="@{viewModel.getImageRes()}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2558 次 |
| 最近记录: |