我的项目中有一个 kotlin android 库模块,我正在尝试使用 DataBinding 库。我正在使用 DataBindingComponent 进行一些图像加载。编译时一切正常,创建了生成的 DataBindingComponent 接口,我可以实现它并将其注入。但是,在运行时,应用程序崩溃:
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBindingComponent;
从检查应用程序的 apk 和库模块的 aar 来看,似乎没有包含 DataBindingComponent。
一些代码片段:
构建.gradle
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
...
android {
...
dataBinding {
enabled = true
}
}
dependencies {
...
kapt "com.android.databinding:compiler:3.1.1"
...
}
图像绑定适配器
class ImageBindingAdapter(private val loadImage: (ImageView, String) -> Unit) {
@BindingAdapter("imageUrl")
fun setImageUrl(view: ImageView, imageUrl: String) {
view.loadImageWhenLaidOut(imageUrl, loadImage)
}
}
数据绑定组件的使用
itemRecyclerAdapter.dataBindingComponent = object : DataBindingComponent {
override fun getImageBindingAdapter(): ImageBindingAdapter {
return ImageBindingAdapter({ imageView, url ->
loadImage(imageView, url)
})
}
}