RecyclerView ViewHolder 在不应该的时候改变视图

RecyclerView ViewHolder changing views when it shouldn't be

对于我的 recyclerview 中的每第 21 个项目,我想将该视图中的图像放大。 应该够简单.

我将此代码添加到我的 IteAdapter 的 onBindViewHolder class:

    override fun onBindViewHolder(holder: ItemViewHolder, pos: Int) {
        val currentItem = getItem(pos)
        val largeItemView = pos >= 21 && pos % 21 == 0
        Log.e("ItemAdapter", "Position: $pos, largeItemView bool: $largeItemView")
        if (currentItem != null) {
            holder.bind(currentItem, pos, largeItemView)
        }
}

largeItemView 布尔值传递到我的 ItemViewHolder

class ItemViewHolder(private val binding: ShopProductItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: RoomItem, pos: Int, largeItemView: Boolean) {
    var imageBefore = item.product_image_list?.substringBefore(',')
    imageBefore = addHttpsToImageUrl(imageBefore)
    if (largeItemView) {
        // This is getting called when largeItemView is false??
        binding.apply {
            imageViewItem.layoutParams.height = 800
            imageViewItem.scaleType = ImageView.ScaleType.FIT_XY
            Glide.with(itemView)
                .load(imageBefore)
                .transition(DrawableTransitionOptions.withCrossFade())
                .into(imageViewItem)
            imageViewItem.setOnClickListener {
                logProductInfo(item, pos, imageBefore, largeItemView)
            }
        }
    } else {
        binding.apply {
            Glide.with(itemView)
                .load(imageBefore)
                .centerCrop()
                .transition(DrawableTransitionOptions.withCrossFade())
                .into(imageViewItem)
            imageViewItem.setOnClickListener {
                logProductInfo(item, pos, imageBefore, largeItemView)
            }
        }

    }
    
}

recyclerview 中每第 21 个项目的高度都会增加。这很棒。然而,recyclerview 中的其他项目随机也有高度增加。我无法解释这一点。我已经设置了日志来显示我点击的项目的位置和布尔值。我将单击一个不应大的大图像项,日志显示 largeItemView 布尔值是 false。那么增加图片尺寸的代码是怎么达到的呢?

以下是日志输出的一些屏幕截图,以备不时之需。

这个问题让我很困惑。对这里发生的事情有什么想法吗?

感谢 Pawel,我有了解决方案

“Viewholders 被重用 - 您的其他情况必须将高度和 scaleType 恢复为默认值,以解决您绑定的 viewholder 绑定到之前触发“largeItemView”的位置的情况

我加了

 imageViewItem.layoutParams.height = 600
 imageViewItem.scaleType = ImageView.ScaleType.CENTER_CROP

到我的 itemviewholder 中的 else 块,它已经解决了这个问题。