Как связать изображение RecyclerView с помощью Glide из класса данных - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь связать представление рециркулятора с классом привязки данных, который отлично работает со следующим кодом

@BindingAdapter("retailPrice")
fun TextView.setRetailPrice(item: VegetableDailyPriceCalender?){
    item?.let {
        text = item.retailPrice.toString()
    }
}

@BindingAdapter("ourPrice")
fun TextView.setOurPrice(item: VegetableDailyPriceCalender?){
    item?.let {
        text = item.ourPrice.toString()
    }
}

@BindingAdapter("itemName")
fun TextView.setItemName(item: VegetableDailyPriceCalender?){
item?.let {
    text = item.vegetable.name
    text
}
}

@BindingAdapter("itemImage")
fun ImageView.setSleepImage(item: VegetableDailyPriceCalender?) {
item?.let {
    setImageResource(R.drawable.ic_launcher_foreground)
}
}

Теперь я хочу преобразовать последнюю привязку для загрузки динамического c изображения из inte rnet с помощью Glide library Glide нужен код, как показано ниже

fun bindImage(imgView: ImageView, imgUrl: String?){
    imgUrl?.let {
        val imgUri = it.toUri().buildUpon().scheme("https").build()
        Glide.with(imgView.context)
            .load(imgUri)
            .apply(
                RequestOptions()
                    .placeholder(R.drawable.loading_animation)
                    .error(R.drawable.ic_broken_image))
            .into(imgView)
    }
}

Любое предложение будет очень полезным.

ОБНОВЛЕНИЕ ... Я пытался следующим образом, но не понял, что перейти на с () и в ()

fun ImageView.setSleepImage(item: VegetableDailyPriceCalender?) {
    val imgUri = item.vegetable.photoUrl.toUri().buildUpon().scheme("https").build()
    item?.let {
        setImageResource(Glide.with(imgView.context)
            .load(imgUri)
            .apply(
                RequestOptions()
                    .placeholder(R.drawable.loading_animation)
                    .error(R.drawable.ic_broken_image))
            .into(imgView))
    }
}

Ответы [ 2 ]

2 голосов
/ 08 января 2020

XML ImageView будет выглядеть так:,

<ImageView
     android:id="@+id/imageId"
     android:layout_width="match_parent"
     android:layout_height="200dp"
     android:src="LOADING_PHOTO_HERE"
     bind:imageUrl="@{`https://YOUR_IMAGE_URL`}"
     android:background="?attr/selectableItemBackgroundBorderless"
     android:scaleType="fitXY"
     tools:ignore="contentDescription" />

Часть кода:

@BindingAdapter({"imageUrl"})
    public static void loadImage(ImageView view, String url) {
        Glide.with(view.getContext())
                .load(url)
                .placeholder(R.drawable.LOADING_PIC)
                .into(view);
    }
2 голосов
/ 08 января 2020

Создайте BindingAdapter, как показано ниже:

@BindingAdapter("imageUrl")
fun setImageUrl(imgView: ImageView, imgUrl: String?){

    imgUrl?.let {
        val imgUri = it.toUri().buildUpon().scheme("https").build()
        Glide.with(imgView.context)
            .load(imgUri)
            .apply(
                RequestOptions()
                    .placeholder(R.drawable.loading_animation)
                    .error(R.drawable.ic_broken_image))
            .into(imgView)
    }
}

И используйте, как показано ниже:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="centerCrop"
    imageUrl="@{viewModel.imageUrl}"/>

Вы также можете использовать функцию расширения, как у вашего

@BindingAdapter("itemImage")
fun ImageView.setSleepImage(item: VegetableDailyPriceCalender?) {
    val imgUri = item.vegetable.photoUrl.toUri().buildUpon().scheme("https").build()
    item?.let {
        Glide.with(context)
            .load(imgUri)
            .apply(
                RequestOptions()
                    .placeholder(R.drawable.loading_animation)
                    .error(R.drawable.ic_broken_image))
            .into(this)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...