Lem*_*981 5 android kotlin android-databinding android-binding-adapter
我试图使用数据绑定来加载带有多个参数的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" />
Run Code Online (Sandbox Code Playgroud)
bindingadapter方法是顶级函数.在编译时,我得到了数据绑定kapt错误'无法找到属性的设置者'app:circleCrop',在android.widget.ImageView上有参数类型boolean',就像我的bindingadapter无法识别一样.不确定我做错了什么
即使编译器说问题在于app:circleCrop,实际问题在于defaultResId和placeholderResId.
在xml中使用drawable时@{@drawable/default_avatar},它总是被编译成Drawable.
因此,您的绑定适配器必须具有签名:
@BindingAdapter(value = ["url", "defaultImage", "placeholder", "circleCrop"], requireAll = false)
fun ImageView.setImageUrl(url: String, default: Drawable? = null, placeholder: Drawable? = null, circleCrop: Boolean = false) {
// code
}
Run Code Online (Sandbox Code Playgroud)
当您查看生成的代码时(例如,fragment_something.xml通常是布局FragmentSomethingBinding),您可以看到结果,并且您会看到可绘制资源使用getDrawableFromResource()函数.
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |