xml中的Android数据绑定src ImageView



我正在显示包含项的列表

<include
layout="@layout/item_tags"
android:title='@{"text"}'
android:image='@{"@drawable/ic_write_item.xml"}'/>

该布局包含

<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="title"
type="java.lang.String" />
<variable
name="image"
type="java.lang.String" />
</data>

<ImageView...
android:src="@{image}"/>
<TextView...
android:text="@{title}" />

还创建了myDatabindingAdapter

object DataBindingAdapters {
@BindingAdapter("android:src")
@JvmStatic
fun setImageUri(view: ImageView, imageUri: Uri) {
view.setImageURI(imageUri)
}
@BindingAdapter("android:src")
@JvmStatic
fun setImageDrawable(view: ImageView, drawable: Drawable) {
view.setImageDrawable(drawable)
}
@BindingAdapter("android:src")
@JvmStatic
fun setImageResource(imageView: ImageView, resource: Int) {
imageView.setImageResource(resource)
}
}

并以这种方式在片段中初始化

val binding: FragmentTagsBinding =  DataBindingUtil.inflate(inflater,R.layout.fragment_tags, container,false)
return binding.root

当我运行它时,我收到以下错误。

E/BitmapFactory:无法解码流:java.io.FileNotFoundException:@drawable/ic_write_item.xml(没有文件或目录(W/ImageView:resolveUri在错误的位图uri上失败:@可绘制/ic_write_item.xml

适配器有问题吗?我应该发送资源id而不是文件名吗?

谢谢你的帮助。

我的问题是将XML中的变量声明为String而不是type="android.graphics.drawable.Drawable"

另请参见@Janosch回答@{@drawable/ic_write_item}而不是@{"@drawable/ic_write_item.xml"}

Android:src不获取字符串值。它需要一个资源id(int(。此外,您还可以查看它,以便将数据传递到包含的布局https://medium.com/@elia.macani/android-data-binding-passing-a-variable-to-an-include-d-layout-3567099b58f

最新更新