chekbox 总是检查 recyclerview 中的最后一项

皮夫

我想从我的 recyclerview 项目中选中的复选框中获取项目,这是我的适配器

class SelectedListDateAdapter(var listDate: List<DateDay>, private val onItemCheckListener: OnItemCheckListener) :
RecyclerView.Adapter<SelectedListDateAdapter.SelectedListDateViewHolder>() {
lateinit var  binding: ItemCheckBoxDateBinding
inner class SelectedListDateViewHolder(item: ItemCheckBoxDateBinding) : RecyclerView.ViewHolder(item.root) {
    val checkBoxList = item.checkBox
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SelectedListDateViewHolder {
    binding = ItemCheckBoxDateBinding.inflate(
        LayoutInflater.from(parent.context),
        parent,
        false
    )
    return SelectedListDateViewHolder(binding)
}

override fun onBindViewHolder(holder: SelectedListDateViewHolder, position: Int) {
    holder.checkBoxList.setOnCheckedChangeListener(null)
    holder.checkBoxList.isChecked = listDate[position].isSelected
    holder.itemView.apply {
        val currentItem = listDate[position]
        binding.tvDateList.text = listDate[position].date

        setOnClickListener {
            binding.checkBox.isChecked = !binding.checkBox.isChecked
            if (binding.checkBox.isChecked) {
                binding.checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
                    currentItem.isSelected = isChecked
                }
                onItemCheckListener.onItemCheck(currentItem)
            } else {
                binding.checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
                    currentItem.isSelected = isChecked
                }
                onItemCheckListener.onItemUncheck(currentItem)
            }
        }
    }
}

override fun getItemCount(): Int {
    return listDate.size
}

}

我指的是这个问题获取检查项目列表以制作该适配器

是的,它获取该项目并删除它们但每次我在 recyclerview 中单击一个项目它总是检查并取消选中最后一个项目

在 RecyclerView 中检查了这个问题CheckBox 不断检查不同的项目,但我的结果仍然相同,任何帮助表示赞赏

GuanHongHuang

也许viewHolder 重用了之前的item。尝试更新listData,而不是currentItem。并移动嵌套的侦听器

override fun onBindViewHolder(holder: SelectedListDateViewHolder, position: Int) {

    holder.itemView.tvDateList.text = listDate[position].date
    holder.checkBoxList.isChecked = listDate[position].isChecked
    holder.checkBoxList.setOnClickListener {

       listDate[position].isSelected = holder.checkBoxList.isChecked
    }

    holder.itemView.setOnClickListener {

        holder.checkBoxList.isChecked = !holder.checkBoxList.isChecked
        listDate[position].isSelected = holder.checkBoxList.isChecked

        val currentItem = listDate[position]
        if (holder.checkBoxList.isChecked) {

            onItemCheckListener.onItemCheck(currentItem)

        } else {

            onItemCheckListener.onItemUncheck(currentItem)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GridLayout中的RecyclerView时无法显示最后一项

RecyclerView中的最后一项未显示

Recyclerview 表示到达最后一项

AdView与RecyclerView的最后一项重叠

检查javascript数组中的最后一项

分别删除RecyclerView中的两项,最后一项重复显示

RecyclerView中仅显示一项

如何在recyclerview的顶部显示房间数据库中的最后一项

从列表中获取最后一项 - 单击 Recyclerview 上的添加按钮

recyclerview 仅显示单击项目意图的最后一项

我的 Recyclerview 只显示最后一项

底部导航视图与RecyclerView的最后一项重叠

Tkinter ListboxSelect 回调总是处理列表中的最后一项

splice 总是删除 Vue.js 中的最后一项

为什么变量总是设置为列表中的最后一项?

Javascript:在for循环中映射总是返回最后一项

JavaScript array.map 总是返回最后一项

在ColdFusion中遍历结构时如何检查最后一项?

如何检查mongodb中列表字段的最后一项值

如何检查RecyclerView的第一项在屏幕上是否可见

如果不需要滚动,是否可以将RecyclerView中的最后一项停靠在底部?

双击首次加载后,Android RecyclerView的“第一项和最后一项”单击有效

Android RecyclerView - 当我更改第一项时,最后一项也会更改

如何从RecyclerView中自动选择第一项?

RecyclerView仅显示Firebase中的一项

如果在python中使用单线-为什么结果总是列表中的最后一项?

RecyclerView将最后一个ArrayList项数据设置为第一项

使用jquery检查chekbox时如何制作键值对数组?

如何将RecyclerView上的最后一项滚动到顶部?