100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android ListView中CheckBox选中状态失效的最佳解决方案

Android ListView中CheckBox选中状态失效的最佳解决方案

时间:2024-02-14 21:12:02

相关推荐

Android ListView中CheckBox选中状态失效的最佳解决方案

Android ListView中CheckBox选中状态失效:

在ListView中某一项滑到显示区外部的时候,重新划回来时其中的CheckBox的选中状态会重置,本文提出了一种解决方案,操作起来快速简单。

有问题的代码

以前我在代码中是这样写的,实现的是CheckBox的OnCheckedChangeListener事件:

@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {...viewHolder.checkBoxItemServerInfoSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {serverInfoList.get(position).setSelected(!serverInfoList.get(position).isSelected());...}});viewHolder.checkBoxItemServerInfoSelected.setChecked(serverInfoList.get(position).isSelected());...return convertView;}

原因分析:

某一项划栋超出屏幕后,控件选中状态重置,自动触发OnCheckedChangeListener事件,且自动修改了数据集合中元素的选中状态(改为了"未选中"),导致出现业务逻辑错误。

我们要的是数据的选中与否的状态应该由用户控制,而不是控件本身。控件只起显示作用。

解决方案:

很简单,只需将CheckBox的事件由OnCheckedChangeListener类型改为控件通用的OnClickListener类型即可,修改后的代码为。

@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {...viewHolder.checkBoxItemServerInfoSelected.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {serverInfoList.get(position).setSelected(!serverInfoList.get(position).isSelected());...}serverInfoList.get(position).setSelected(!serverInfoList.get(position).isSelected());...});

这样修改后,CheckBox的状态将跟随集合中数据的选中状态进行呈现,完美解决该问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。