我正在尝试新的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)
答案 0 :(得分:0)
您的编译器未能找到方法loadImageFromNetwork()
,因为它已添加到对象内,因此请考虑将其放在类似以下的类中:
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)
}
}
}
您很高兴参加该课程。
答案 1 :(得分:0)
尝试一下
class CarViewModel(var car: Car, val context: Context) {
fun getImageCar() = car.model.photoUrl
companion object {
@JvmStatic @BindingAdapter("imageUrl")
fun setImageUrl(imageView: ImageView, url: String) {
Glide.with(imageView.context).load(url).into(imageView)
}
}
}
在您的XML文件中
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<variable name="carViewModel"
type="your.package.CarViewModel"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_notice"
android:layout_width="120dp"
android:layout_height="120dp"
app:imageUrl="@{carViewModel.imageNotice}"/>
</LinearLayout>
它对我有用,您需要首先获取URL,然后进行数据绑定将URL放入imageView。我也使用androidX,不是用于图像,而是用于其余组件