我正在尝试使用数据绑定来加载图片,使用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方法是一种顶级函数。在编译时,我会遇到databinding-kapt错误“无法找到android.widget.ImageView上参数类型为布尔值的属性'app:circleCrop'的setter”,就好像我的bindingadapter没有被识别一样。 不确定我做错了什么。
public static void setAnchorId(View view, @NonNull int anchorId, @NonNull boolean isPremiumUser) {....}``` 这段代码似乎对我无效。
- ekouChiqrequireAll=false
,并且您没有同时使用两个属性(但这只是猜测)。请展示XML代码 :) - mlykotom@BindingAdapter(value = ["anchorId", "isPremiumUser"]) public static void setAnchorId(View view, @NonNull int anchorId, @NonNull boolean isPremiumUser) {....}
@mlyko 您可能也需要编辑您的回答。 - Edi