android - 在android中滚动时自动取消选中recyclerview中的复选框
问题描述
我使用 recyclerview 适配器创建了一个视图来列出学生。我的问题是,当我滚动视图时,所有选中的复选框都会自动取消选中。这意味着状态正在发生变化。如何克服这个问题
在这里我分享了我的代码。请检查并提出解决方案。提前致谢。
class IndividualStudentSelectAdapter(private val context: Context,
private var students: List<IndividualStudentBean>,
private val checkBox1: CheckBox,
private val individualStudentSelectionListener: IndividualStudentSelectionListener
)
: RecyclerView.Adapter<IndividualStudentSelectAdapter.ViewHolder>(){
companion object {
val TAG: String = IndividualStudentSelectAdapter::class.java.simpleName
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): IndividualStudentSelectAdapter.ViewHolder {
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.individual_student, p0, false))
}
override fun getItemCount(): Int {
return students.size
}
override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
val user = students.get(p1)
p0.bindView(p1)
p0.binding.individualStudentBean = students[p1]
if (user.getSelected()==true) {
p0.checkbox2.isChecked = true
} else {
p0.checkbox2.isChecked = false
}
p0.checkbox2.setOnCheckedChangeListener { buttonView, isChecked ->
if(isChecked)
{
// val individualStudentBean = IndividualStudentBean(user.empid,"","")
Log.d("admnos",user.id)
individualStudentSelectionListener.addDatas(user.id)
user.setSelected(true)
}else{
individualStudentSelectionListener.removeDatas(user.id)
user.setSelected(false)
}
}
checkBox1.setOnCheckedChangeListener {
buttonView, isChecked ->
if (isChecked){
for (item in students)
{
p0.checkbox2.isChecked = true
item.setSelected(true)
notifyDataSetChanged()
}
}else{
for (item in students) {
p0.checkbox2.isChecked = false
item.setSelected(false)
notifyDataSetChanged()
}
}
}
}
fun updateDataset(students: List<IndividualStudentBean>) {
this.students = students
notifyDataSetChanged()
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var binding: IndividualStudentBinding = DataBindingUtil.bind(itemView)!!
val checkbox2 = itemView.findViewById(R.id.cb_student) as CheckBox
fun bindView(position: Int) {
// this.setIsRecyclable(false)
binding.individualStudentBean = students[position]
itemView.setOnClickListener {
//students[position].selected = itemView.cb_student.isChecked
if (context is IndividualStudentSelectActivity) {
//context.onStudentSelected()
}
if (context is IndividualStudentSelectActivity) {
//context.onStudentSelected()
}
}
}
}
}
解决方案
在数据类中添加一个名为isChecked
(名称取决于您的选择)的属性,然后在方法Student
中添加此代码bindView
checkbox2.isChecked = students[adapterPosition].isChecked
checkbox2.setOnCheckedChangeListener { _, isChecked ->
students[adapterPosition].isChecked = isChecked
}
推荐阅读
- configuration - 当 cpu 资源平均使用率为 71% 时,Mesos dcos 不允许服务启动
- linux - linux上有多个postgresql安装时如何添加另一个postgres用户名?
- javascript - Board、Medium 和 Standard 的动态相关下拉列表
- azure - Azure Log Analytics 和 Data Lake Store 诊断日志 - 过滤掉数据备份日志事件
- java - 如何处理 java.lang.IllegalStateException
- uwp - UWP NavigationView 设置 IsPaneOpen false
- python - Cython:如何将列表传递给本机
- c++ - wxWIdgets 中的 createPopUpMenu 有时会显示远离任务栏的菜单
- ruby-on-rails - 如何为一个项目拥有多个 Gemfile?
- matlab - Matlab表面hsv颜色图