Android Kotlin - imageUrl 的绑定适配器 AK(android.widget.ImageView, java.lang.String) 已存在

dev*_*uaz 4 data-binding android mvvm kotlin

当我构建 Android 应用程序时,出现以下日志错误:

Binding adapter AK(android.widget.ImageView, java.lang.String) already exists for imageUrl! Overriding com.example.newsapp.utils.ImageUtils.Companion#loadImageFromUrl with com.example.newsapp.utils.ImageUtils#loadImageFromUrlwarning: Binding adapter AK(android.widget.ImageView, java.lang.String) already exists for imageUrl! Overriding com.example.newsapp.utils.ImageUtils.Companion#loadImageFromUrl with com.example.newsapp.utils.ImageUtils#loadImageFromUrl
Run Code Online (Sandbox Code Playgroud)

imageUrl属性是

class ImageUtils {
    companion object {

        @JvmStatic
        @BindingAdapter("imageUrl")
        fun ImageView.loadImageFromUrl(imageUrl: String?) {
            Glide.with(this).load(imageUrl).into(this)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且 xml 文件包含以下内容:

<ImageView
    android:id="@+id/articleImage"
    android:layout_width="158dp"
    android:layout_height="0dp"
    android:scaleType="centerCrop"
    app:imageUrl="@{article.urlToImage}"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="ContentDescription"
    tools:srcCompat="@tools:sample/avatars" />
Run Code Online (Sandbox Code Playgroud)

adr*_*em7 5

对于科特林

我认为问题在于如何从 Kotlin 类生成 Java 类。如果反编译代码,您可以看到问题,因为它将定义适配器两次,一次在类中,一次在伴生类中。

2个解决方案:

方法一:对象声明

package myApp
// import omitted

companion object ImageUtilsBindingAdapter {

    @JvmStatic
    @BindingAdapter("imageUrl")
    fun ImageView.loadImageFromUrl(imageUrl: String?) {
        Glide.with(this).load(imageUrl).into(this)
    }
}
Run Code Online (Sandbox Code Playgroud)

方法二:封装函数

package myApp;
// import omitted

@BindingAdapter("imageUrl")
fun ImageView.loadImageFromUrl(imageUrl: String?) {
    Glide.with(this).load(imageUrl).into(this)
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里阅读更多相关内容。 https://medium.com/@hkhcheung/defining-android-binding-adapter-in-kotlin-b08e82116704

感谢 Medium 文章作者 Herman Cheung。