RecyclerView 中的线圈不会在滚动时加载新内容

问题描述

请帮帮我。
我使用 Coil 在网格 RecyclerView 中显示图像。
实现非常简单 - 在每个 viewholder.bind() 中我调用 image.load(URL)
URL 是静态的 URL = "https://loremflickr.com/200/200/",只是为每个请求提供一个新的随机图片
RecyclerView 在应用启动时创建持有者时,image.load(URL) 工作正常,为每个持有者加载新图像。
问题:当我开始滚动回收器时,image.load(URL) 只拍摄最新下载的图片,而不是下载新图片。我使用 loggerInterceptor 看到 image.load(URL) 仅对第一部分持有者执行真正的 http 调用
问题:如何让 Coil 为 recyclerView 中的每个 viewholder 下载新图片,而不仅仅是第一组可见的持有者?

enter image description here

持有人:

class ImageViewHolder(val binding: ItemImageBinding) : RecyclerView.ViewHolder(binding.root) {
 
    fun bind() {
        binding.image.load(URL){}
    }
 
    companion object {
        fun create(parent: ViewGroup): ImageViewHolder {
            val layoutInflater = LayoutInflater.from(parent.context)
            val binding = ItemImageBinding.inflate(layoutInflater)
            return ImageViewHolder(binding)
        }
    }
}

适配器:


class ImageRvAdapter(val list: MutableList<ImageModel>) : listadapter<ImageModel,ImageViewHolder>(
    IMAGE_COMParaTOR
) {
 
    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ImageViewHolder {
        return ImageViewHolder.create(parent)
    }
 
    override fun onBindViewHolder(holder: ImageViewHolder,position: Int) {
        holder.bind()
    }
 
    companion object {
        val IMAGE_COMParaTOR = object : DiffUtil.ItemCallback<ImageModel>() {
            override fun areItemsTheSame(oldItem: ImageModel,newItem: ImageModel): Boolean {
                return newItem::class == oldItem::class
            }
 
            override fun areContentsTheSame(oldItem: ImageModel,newItem: ImageModel): Boolean {
                return oldItem == newItem
            }
        }
    } }

适配器设置:

   //Data model for list
    sealed class ImageModel{
        object Image:ImageModel()
    }
    //Adapter setup
    lateinit var adatper: ImageRvAdapter
    private fun initRecyclerView() {
        //creating a list of 140 items
        val imageList: MutableList<ImageModel> = mutablelistof()
        for (i in 0..139){  
            imageList.add(ImageModel.Image)
        }
        //adapter stuff
        adatper = ImageRvAdapter()
        binding.recyclerView.layoutManager = GridLayoutManager(
            this,6,GridLayoutManager.HORIZONTAL,false
        )
        binding.recyclerView.adapter = adatper
        adatper.submitList(imageList) 
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...