Home > Enterprise >  Adapter with Picasso
Adapter with Picasso

Time:12-18

I'm trying to use Picasso to get images from Url and put inside an Adapter. I have to send the image as a parameter to the funcion imageSlider inside the my SliderViewHolder. Can someone explain me how?

Picasso get:

Picasso.get()
            .load(sliderImages[position])
            .transform( RoundedTransformation(30, 0))
            .placeholder(context.resources.getDrawable(R.drawable.ic_launcher_foreground))//it will show placeholder image when url is not valid.
            .networkPolicy(NetworkPolicy.OFFLINE) //for caching the image url in case phone is offline
            .into(holder.imageSlider(?))

Viewholder:

class SliderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val imageView: RoundedImageView = itemView.findViewById(R.id.image_slide)

        fun imageSlider(sliderItem: SliderItem) {
            imageView.setImageResource(sliderItem.image)
        }
    }

CodePudding user response:

The Function

fun imageSlider(sliderItem: SliderItem) {
    imageView.setImageResource(sliderItem.image)
}

is not necessary, because you declare the imageView with a public visibility.

In the Adapter of your RecyclerView, there is a Method called

override fun onBindViewHolder(holder: SliderViewHolder, position: Int)

This one will get invoked, when the Adapter wants to bind your Item Layout (ViewHolder) with a "backing data item" of the List...

Then you could simply do this:

Picasso.get()
            .load(sliderImages[position])
            .transform( RoundedTransformation(30, 0))
            .placeholder(context.resources.getDrawable(R.drawable.ic_launcher_foreground))//it will show placeholder image when url is not valid.
            .networkPolicy(NetworkPolicy.OFFLINE) //for caching the image url in case phone is offline
            .into(holder.imageView)

Which will make Picasso, load the Image into the ImageView of your ViewHolder (which actually simply holds the Item Layout) for the current Item in the List.

The correct implementation would actually be, that you give your Adapter a List of Image Objects (for example, containing Properties like Image Name and a Path/URL, that should get "rendered") and when the Adapter is invoking "onBindViewHolder" with the corresponding Position, it is your Job to implement the loading of the image from the given path for the given position.

  • Related