Как мы пишем необработанную строку в пользовательском атрибуте привязки данных? - PullRequest
0 голосов
/ 06 марта 2019

Я пишу пользовательский атрибут для URL-адреса загружаемого изображения следующим образом:

@BindingAdapter("srcCircleUrl")
fun loadCircleImage(view: ImageView, imageUrl: String) {
    loadImage(view.context, imageUrl, view, options = circleCropTransform())
}

, когда я хочу установить необработанную строку в xml, это дает мне srcCircleUrl attribute not found ошибку.

например, если я напишу что-то подобное, это не сработает:

<ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    app:srcCircleUrl="https://66.media.tumblr.com/97bcd9782631f8bef87bb30e830344a6/tumblr_owxu10zbPB1tl4ciuo4_250.png"
    android:scaleType="centerCrop"
    tools:srcCompat="@drawable/flag_iran" />

Итак, вопрос в том, как я могу дать необработанную строку в качестве входных данных для пользовательского атрибута привязки данных?


Я также проверяю эти способы:

app:srcCircleUrl="@{https://66.media.tumblr.com/97bcd9782631f8bef87bb30e830344a6/tumblr_owxu10zbPB1tl4ciuo4_250.png}"

app:srcCircleUrl="@{`https://66.media.tumblr.com/97bcd9782631f8bef87bb30e830344a6/tumblr_owxu10zbPB1tl4ciuo4_250.png`}"

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Вам нужно заключить в строку одинарные кавычки и фигурные скобки, например app:something='@{"my string"}'.

Я думаю, что это должно работать для вас:

<ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    app:srcCircleUrl='@{"https://66.media.tumblr.com/image.png"}'
    android:scaleType="centerCrop"
    tools:srcCompat="@drawable/flag_iran" />
0 голосов
/ 06 марта 2019

Я думаю, что вам нужны возвраты в формате url из ресурса привязки данных, вы не можете напрямую передать https URL в приложение: srcUrl

@BindingAdapter("imageUrl")
    public static void setImageUrl(ImageView view, String imageUrl) {
       Picasso.with(view.getContext())
                .load(imageUrl)
                .placeholder(R.drawable.placeholder)
                .into(view); 0));
    }

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable name="prod" type="com.webkul.example.Product"/>
    </data>
<ImageView
  android:id="@+id/image"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:gravity="center"
  app:imageUrl="@{prod.img_url}"/>
</layout>
...