私のプロジェクトには、DataBinding ライブラリを使用しようとしている kotlin Android ライブラリ モジュールがあります。私は DataBindingComponent を使用して画像の読み込みを行っています。コンパイル時にはすべて問題なく、生成された DataBindingComponent インターフェイスが作成され、それを実装して挿入できます。ただし、実行時にアプリがクラッシュします。
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBindingComponent;
アプリの apk とライブラリ モジュールの aar を調べると、DataBindingComponent が含まれているようには見えません。
いくつかのコード スニペット:
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)
})
}
}