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

标签 android kotlin mvvm data-binding

在构建 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
图片网址 属性是:
class ImageUtils {
    companion object {

        @JvmStatic
        @BindingAdapter("imageUrl")
        fun ImageView.loadImageFromUrl(imageUrl: String?) {
            Glide.with(this).load(imageUrl).into(this)
        }
    }
}
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" />

最佳答案

对于 Kotlin
我认为问题在于 Java 类是如何从您的 Kotlin 类生成的。如果您反编译代码,您会看到问题,因为它将定义适配器两次,一次在类中,一次在伴随类中。
2个解决方案:
方法一:对象声明

package myApp
// import omitted

companion object ImageUtilsBindingAdapter {

    @JvmStatic
    @BindingAdapter("imageUrl")
    fun ImageView.loadImageFromUrl(imageUrl: String?) {
        Glide.with(this).load(imageUrl).into(this)
    }
}
方法二:封装函数
package myApp;
// import omitted

@BindingAdapter("imageUrl")
fun ImageView.loadImageFromUrl(imageUrl: String?) {
    Glide.with(this).load(imageUrl).into(this)
}
您可以在此处了解更多信息。
https://medium.com/@hkhcheung/defining-android-binding-adapter-in-kotlin-b08e82116704
感谢 Medium 文章作者 Herman Cheung。

关于Android Kotlin - imageUrl 的绑定(bind)适配器 AK(android.widget.ImageView, java.lang.String) 已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63941942/

相关文章:

javascript - 我如何知道在选择框中选择了哪个对象,或者是否可以将对象绑定(bind)到 KnockoutJS View 模型?

c# - 如何将 Silverlight MVVM 中可观察集合中的单个字段数据绑定(bind)到组合框?

android - (使用 Android Studio)AVD 在我的应用程序启动期间崩溃

java - Java每次都会重新编译每个文件吗?

lambda - 使用Lambda重构Kotlin方法

kotlin - 如何使用变量的主体将数据从变量传递到构造函数?

c# - 从头开始构建我自己的 mvvm 项目?

android - 如何向存储访问框架表明我不再需要加载动画?

android - 设置setBackgroundResource失败,只有应用在android中运行后才能成功

java - tempCodeRunnerFile.jar 中没有主要 list 属性