Android XML中的数据绑定src ImageView

时间:2018-12-11 16:15:31

标签: android android-layout android-databinding

我正在显示包含项的列表

<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上失败:   @ drawable / ic_write_item.xml

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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