首页 > 解决方案 > Android 数据绑定不适用于 androidX

问题描述

我正在尝试新的 android x 库,它取代了 android 中的旧 appCompat 库。我遇到了一个问题。我想在 recyclerView 项目上加载图像,为此我想使用数据绑定。这是我的代码

 <androidx.appcompat.widget.AppCompatImageView
                app:loadImageFromNetwork="@{car.model.photoUrl}" <- here I'm using binding class
                android:id="@+id/appCompatImageView"
                android:layout_width="170dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

这里是我的绑定类

import androidx.appcompat.widget.AppCompatImageView
import androidx.databinding.BindingAdapter
import com.bumptech.glide.Glide

object Bindings {
    @JvmStatic
    @BindingAdapter("loadImageFromNetwork")
    fun loadImageFromNetwork(imageView: AppCompatImageView, url: String) {
        Glide.with(imageView.context).load(url).into(imageView)
    }
}

我收到了这个错误

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> android.databinding.tool.util.LoggedErrorException: Found data binding errors.
  ****/ data binding error ****msg:Cannot find the setter for attribute 'app:loadImageFromNetwork' with parameter type java.lang.String on android.widget.ImageView.
  file:S:\Downloads\ppp\MyApplication\app\src\main\res\layout\car_item_view.xml
  loc:26:44 - 26:61
  ****\ data binding error ****

有什么想法有什么问题吗?

编辑我的gradle.properties文件中也有这个

android.useAndroidX=true
android.enableJetifier=true

这是我的汽车课

data class Car(val id:  Int, val plateNumber: String, val location: Location, val model: Model)

data class Model(val id: Int, val title: String, val photoUrl: String)

标签: androidandroid-databindingandroidx

解决方案


您的编译器找不到 method loadImageFromNetwork(),因为它已添加到object中,因此请考虑将其放置在如下类中:

import androidx.appcompat.widget.AppCompatImageView
import androidx.databinding.BindingAdapter
import com.bumptech.glide.Glide

class Bindings {
    companion object {
        @JvmStatic
        @BindingAdapter("loadImageFromNetwork")
        fun loadImageFromNetwork(imageView: AppCompatImageView, url: String) {
            Glide.with(imageView.context).load(url).into(imageView)
        }
    }
}

你很高兴上那门课。


推荐阅读