RecyclerView CheckBox自动勾选异常:勾选一项后11-12项莫名选中
问题描述
勾选RecyclerView中的某个复选框后,第11-12项的复选框会自动被勾选(未手动点击),推测问题出在ViewHolder的位置处理逻辑上,以下是相关代码:
Adapter ViewHolder代码
inner class ProductListViewHolder(val itemBinding: SelectProductLayoutBinding) : RecyclerView.ViewHolder(itemBinding.root) { fun bindItems(data: ManufacturingProductItem, position: Int) { if (data.name != null) itemBinding.userNameTv.text = data.name else itemBinding.userNameTv.text = "" itemBinding.userNameTv.setOnClickListener { listener.onProductClickListener( data, itemBinding.userNameTv.isChecked ) } } }
RecyclerView分页相关代码
binding.productRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { super.onScrollStateChanged(recyclerView, newState) if (newState != RecyclerView.SCROLL_STATE_IDLE) { return } if (!recyclerView.canScrollVertically(1)) { if (productAdapter.getProductResponseList.size > 2) { count++ productPresenter.getProducts("", count.toString(), true) } } } })
解决方案
这是RecyclerView的ViewHolder复用机制导致的问题:当列表滚动时,离开屏幕的ViewHolder会被复用到新进入屏幕的item位置,而你当前的bindItems方法没有根据数据的选中状态同步复选框状态,导致旧的选中状态被带到了新item上。
修改步骤:
- 在
ManufacturingProductItem类中添加isChecked字段,用来记录当前item的选中状态:
data class ManufacturingProductItem( // 原有字段 val name: String?, // 新增选中状态字段 var isChecked: Boolean = false )
- 修改ViewHolder的
bindItems方法,将复选框状态与数据绑定,点击时同步更新数据状态:
inner class ProductListViewHolder(val itemBinding: SelectProductLayoutBinding) : RecyclerView.ViewHolder(itemBinding.root) { fun bindItems(data: ManufacturingProductItem, position: Int) { // 设置文本 itemBinding.userNameTv.text = data.name ?: "" // 关键:根据数据状态设置复选框状态 itemBinding.userNameTv.isChecked = data.isChecked itemBinding.userNameTv.setOnClickListener { // 更新数据的选中状态 data.isChecked = itemBinding.userNameTv.isChecked listener.onProductClickListener(data, data.isChecked) // 可选:局部刷新当前item,避免状态混乱 // productAdapter.notifyItemChanged(position) } } }
补充说明
你提供的分页代码逻辑无问题,无需修改。核心问题是未将复选框状态与数据源绑定,导致复用ViewHolder时状态混乱。
内容的提问来源于stack exchange,提问作者user2357113
相关产品推荐
相关产品推荐

