如何使用Picasso加载网络图片并传入SliderViewHolder的imageSlider方法?
解决Picasso在RecyclerView Adapter中加载图片到ViewHolder的问题
步骤1:修改SliderViewHolder的imageSlider方法
调整方法参数,让它能接收图片URL和上下文,在方法内部完成Picasso的图片加载逻辑:
class SliderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val imageView: RoundedImageView = itemView.findViewById(R.id.image_slide) // 修改方法参数,接收图片URL与上下文 fun imageSlider(imageUrl: String, context: Context) { // 优先从离线缓存加载 Picasso.get() .load(imageUrl) .transform(RoundedTransformation(30, 0)) .placeholder(context.resources.getDrawable(R.drawable.ic_launcher_foreground)) .networkPolicy(NetworkPolicy.OFFLINE) .into(imageView) // 可选:如果离线缓存无对应图片,再从网络请求加载 Picasso.get() .load(imageUrl) .transform(RoundedTransformation(30, 0)) .placeholder(context.resources.getDrawable(R.drawable.ic_launcher_foreground)) .into(imageView, object : Callback { override fun onSuccess() {} override fun onError(e: Exception?) { // 可在此添加加载失败的处理逻辑 } }) } }
步骤2:在Adapter的onBindViewHolder中调用方法
在Adapter绑定ViewHolder的方法里,传入对应位置的图片URL和上下文即可:
override fun onBindViewHolder(holder: SliderViewHolder, position: Int) { val targetImageUrl = sliderImages[position] holder.imageSlider(targetImageUrl, context) }
可选适配:如果使用SliderItem数据类
如果你的数据源是包含图片URL的SliderItem类,也可以修改方法参数为SliderItem,从对象中提取URL加载:
// 修改后的ViewHolder方法 fun imageSlider(sliderItem: SliderItem, context: Context) { Picasso.get() .load(sliderItem.imageUrl) // 假设SliderItem有imageUrl字段 .transform(RoundedTransformation(30, 0)) .placeholder(context.resources.getDrawable(R.drawable.ic_launcher_foreground)) .networkPolicy(NetworkPolicy.OFFLINE) .into(imageView) } // Adapter中的调用 override fun onBindViewHolder(holder: SliderViewHolder, position: Int) { val targetItem = sliderItems[position] holder.imageSlider(targetItem, context) }
内容的提问来源于stack exchange,提问作者Antony Lajes
相关产品推荐
相关产品推荐

