gpt4 book ai didi

android - 具有多个参数的数据绑定(bind)绑定(bind)适配器不起作用

转载 作者:IT老高 更新时间:2023-10-28 13:47:27 28 4
gpt4 key购买 nike

我正在尝试使用数据绑定(bind)来加载具有多个参数的 Glide、Imageview 和 Bindingadapter 的图像:

@BindingAdapter(value = ["url", "defaultImage", "placeholder", "circleCrop"], requireAll = false)
fun ImageView.setImageUrl(url: String, defaultResId: Int? = null, placeHolderResId: Int? = null, circleCrop: Boolean = false) {
val glideRequest = if (defaultResId != null) GlideApp.with(context).loadOrDefault(url, defaultResId)
else GlideApp.with(context).load(url)
if (placeHolderResId != null) glideRequest.placeholder(placeHolderResId)
if (circleCrop) glideRequest.circleCrop()
glideRequest.into(this)
}

<ImageView
android:id="@+id/imgProfile"
android:layout_width="@dimen/size_avatar_search_result"
android:layout_height="0dp"
app:circleCrop="@{true}"
app:defaultImage="@{@drawable/default_avatar}"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:placeholder="@{@drawable/default_avatar}"
app:url="@{item.profilePhotoUrl}"
tools:src="@drawable/default_avatar" />

bindingadapter 方法是一个顶级函数。编译时出现数据绑定(bind)-kapt 错误“在 android.widget.ImageView 上找不到参数类型为 bool 型的属性 'app:circleCrop' 的 setter ”,就好像我的 bindingadapter 无法识别一样。不知道我做错了什么

最佳答案

尽管该编译器说问题出在 app:circleCrop,但实际问题出在 defaultResIdplaceholderResId

当在 xml @{@drawable/default_avatar} 中使用 drawable 时,它​​总是被编译成 Drawable

因此你的绑定(bind)适配器必须有签名:

@BindingAdapter(value = ["url", "defaultImage", "placeholder", "circleCrop"], requireAll = false)
fun ImageView.setImageUrl(url: String, default: Drawable? = null, placeholder: Drawable? = null, circleCrop: Boolean = false) {
// code
}

您可以在查看生成的代码时看到结果(例如,对于布局 fragment_something.xml,它通常是 FragmentSomethingBinding)并且在那里您会看到可绘制资源使用 getDrawableFromResource() 函数。

关于android - 具有多个参数的数据绑定(bind)绑定(bind)适配器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com