如何使用来自数据类的Glide绑定RecyclerView图像

问题描述 投票:0回答:2

我正在尝试将回收器视图与数据绑定类绑定在一起,该类可以与以下代码完美配合工作

@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)
}
}

现在我想使用Glide库将最后的绑定转换为从Internet加载动态图像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)
    }
}

任何建议都会很有帮助。

更新...我尝试按照以下方式进行操作,但混淆了传递给with()into()

的内容
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))
    }
}
android android-databinding android-glide
2个回答
0
投票

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);
    }

0
投票

创建如下所示的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("imageUrl")
fun ImageView.setImageUrl(imgUrl: String?){

    imgUrl?.let {
        val imgUri = it.toUri().buildUpon().scheme("https").build()
        Glide.with(context)
            .load(imgUri)
            .apply(
                RequestOptions()
                    .placeholder(R.drawable.loading_animation)
                    .error(R.drawable.ic_broken_image))
            .into(this)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.