Катушка в RecyclerView не загружает новый контент при прокрутке

Помоги мне, пожалуйста.
Я использую Coil для показа изображений в сетке RecyclerView.
Реализация очень проста - в каждом viewholder.bind() Я звоню .
URL статично URL = "https://loremflickr.com/200/200/"и просто предоставляет новую случайную картинку по каждому запросу.
Когда RecyclerViewсоздает держателей при запуске приложения, работает нормально, загружая новое изображение для каждого держателя.
Проблема : когда я начинаю прокручивать ресайсер, просто берет последнее загруженное изображение вместо загрузки нового. я использовал loggerInterceptor чтобы увидеть это image.load(URL)выполняет настоящие http-вызовы только для первой части владельцев.
Вопрос : Как мне заставить Coil загружать новое изображение для каждого держателя просмотра в recyclerView, а не только для первой группы видимых держателей?

<img alt="введите описание изображения здесь" src="https://i.stack.imgur.com/u9nVO.png"/>

Держатель:

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

0 ответов

Другие вопросы по тегам