【问题标题】:checked checkbox become unchecked in recyclerview after scrolling滚动后选中的复选框在recyclerview中变为未选中
【发布时间】:2021-12-16 13:32:24
【问题描述】:

我有一个带有项目列表的回收视图,当我检查一个项目并滚动直到选中的复选框消失,然后再次滚动到它时,复选框变为未选中

这是我的适配器代码

class ContactsAdapter(var list:ArrayList<contact>, private val listener: (contact) -> Unit):RecyclerView.Adapter<ContactsAdapter.viewHolder>() {

    inner class viewHolder(view:View):RecyclerView.ViewHolder(view)
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): viewHolder {
        var view = LayoutInflater.from(parent.context).inflate(R.layout.item_ui, parent, false)
        return viewHolder(view)
    }
    override fun onBindViewHolder(holder: viewHolder, position: Int) {
        var itemPosition = list[position]
        holder.itemView.apply {
            contact_name.text=itemPosition.contactName
            contact_number.text=itemPosition.contactNumber[0]
            check_number.setOnClickListener {
                listener(itemPosition)
            }
            check_number.isChecked = itemPosition.checked
}
    }
    override fun getItemCount(): Int {
       return list.size
    }
}

【问题讨论】:

    标签: android kotlin android-recyclerview android-adapter android-checkbox


    【解决方案1】:

    RecyclerView 回收其行。你的setOnClickListener() 需要做一些事情来保持哪些项目被选中和未选中,你的onBindViewHolder() 需要在绑定项目时更新CheckBox。似乎第二部分已经实现,但可能不是第一部分。您可能需要在您的 lambda 中为 setOnClickListener() 更新 itemPosition.checked

    【讨论】:

    • 谢谢,我按照您的指示保存了支票,但我还有另一个问题,假设我有 20 个项目,我检查了第 3 个项目,当我继续滚动时,我发现随机项目也被检查了!
    • @AnasHafidi:RecyclerView 回收其行。这意味着当用户滚动时,某个先前项目的CheckBox 将被重新用于某些新项目。确保在每次 onBindViewHolder() 调用中始终更新 CheckBox 以反映新绑定项目的选中状态。除此之外,使用调试或Log 调用来查看您在哪里/如何更新CheckBox 小部件,以及您在哪里/如何根据用户检查CheckBox 更新数据。
    • 感谢您的帮助,我按照您的指示修复了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多