android - 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)
解决方案
您的编译器找不到 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)
}
}
}
你很高兴上那门课。
推荐阅读
- terminal - 使用 ls -R 仅显示第一级文件的终端命令
- java - Spring Boot保存将学生分配到组
- node.js - 如何调试在 docker 容器内运行的节点程序
- c++ - boost变体可以为非活动变体调用析构函数吗?
- python - Python:UnicodeDecodeError:'utf-8'编解码器无法解码位置 37 的字节 0x96:无效的起始字节
- java - 消费 Post 方法 Rest + SpringBoot
- android - 为什么我的 webview 应用程序正在下载 .bin 文件?
- ember.js - Ember 保存数据以存储和显示,无需服务器 api
- html - Mojave Html Mail 暗模式:防止某些元素被更改
- android - 当我的应用程序关闭时,如何以编程方式防止设备关闭显示器(屏幕超时)?