#android #data-binding #loadimage #android-binding-adapter
#Android #привязка данных #изображение загрузки #android-привязка-адаптер
Вопрос:
Я пишу пользовательский атрибут для 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`}"
Комментарии:
1. вы не можете загрузить изображение по URL src без преобразования библиотеки изображений
2. попробуйте этот пример, он поможет вам mobikul.com/data-binding-part-ii-image-binding
3. Этот метод также работает, когда я получаю строку из объекта, например
@{item.imageUrl}
, я использую Glide для загрузки изображения вloadImage
метод4. тогда в чем была проблема
5. @AravindV проблема в том, что мы не можем ввести необработанную строку, например, ссылку в качестве входных данных для этого атрибута
Ответ №1:
Вам нужно заключить вашу строку в одинарные кавычки и фигурные скобки вот так 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" />
Ответ №2:
Я думаю, вам нужны возвраты в формате 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>