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