【发布时间】:2018-04-18 10:42:52
【问题描述】:
我的项目中有一个 kotlin android 库模块,我正在尝试使用 DataBinding 库。我正在使用 DataBindingComponent 进行一些图像加载。编译时一切正常,生成的 DataBindingComponent 接口已创建,我可以实现它并将其注入。但是,在运行时,应用程序崩溃:
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBindingComponent;
从查看应用的apk和库模块的aar来看,似乎没有包含DataBindingComponent。
一些代码sn-ps:
build.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"
...
}
ImageBindingAdapter
class ImageBindingAdapter(private val loadImage: (ImageView, String) -> Unit) {
@BindingAdapter("imageUrl")
fun setImageUrl(view: ImageView, imageUrl: String) {
view.loadImageWhenLaidOut(imageUrl, loadImage)
}
}
DataBindingComponent 的使用
itemRecyclerAdapter.dataBindingComponent = object : DataBindingComponent {
override fun getImageBindingAdapter(): ImageBindingAdapter {
return ImageBindingAdapter({ imageView, url ->
loadImage(imageView, url)
})
}
}
【问题讨论】:
-
这很可能是由于主应用模块中缺少
dataBinding { enabled = true }造成的。除了添加到库模块的那个之外,您还需要在其中添加它。 -
嗯,改错了。我现在在生成的 Binding 类(从布局文件创建)上获得了 ClassNotFound
-
@sergejshafarenka 你已经为我指明了正确的方向 - 我需要将 dataBinding 内容添加到我的依赖链中的每个 build.gradle - 所以我有 App -> Lib -> Lib并且数据绑定的东西需要全部 3
-
是的,这是在多模块项目中正确启用数据绑定所需要做的事情。
标签: android kotlin android-databinding kapt