Android привязка данных src ImageView в xml - PullRequest
0 голосов
/ 11 декабря 2018

Я показываю список включаемых элементов

<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: resolUri не удалось на неверном растровом изображении uri: @ drawable / ic_write_item.xml

Это проблема?с адаптером?я должен отправить ресурс id вместо имени файла?

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Моя проблема была в объявлении переменной в XML как String вместо type="android.graphics.drawable.Drawable"

, см. Также ответ @Janosch @{@drawable/ic_write_item} вместо @{"@drawable/ic_write_item.xml"}

0 голосов
/ 11 декабря 2018

Android: src не получает строковое значение.Требуется идентификатор ресурса (int).Дополнительно вы можете посмотреть на это для передачи данных во включенный макет https://medium.com/@elia.maracani/android-data-binding-passing-a-variable-to-an-include-d-layout-3567099b58f

...