解决ListView中多选功能使用CheckBox勾选混乱问题

今天实现在ListView中实现多选并一次性结束被选中的进程时遇到了一个问题,在网上找也找不到对该类问题的解决办法,所以就贴出来讨论讨论:

当我选中了第一个item的CheckBox时,显示只选中了一个:


注意:当我向下滑动的时候,没有选中的进程也自动被选中:


之后我跟踪了一下程序的运行,但是程序也没有问题。

不过又试了几次我注意到,每次的我在正在显示的界面的程序列表中选中一个cb,被自动选中的都不会在同一个正在显示的列表中

那么问题出来了,然而答案也随之出来了:

-----------问题就在于convertView。


原因:

我们都知道,ListView的convertView是用来对item控件进行缓存的,那么当我选中了第一个cb的时候,当我上划之后,之前选中的cb也就会被

缓存到convertView中,而这时缓存中的cb是选中状态,所以显示出来就是选中的状态。


解决办法:

这个问题的解决办法其实主要针对缓存convertView即可:

1|首先保存多选的item的id(或者包名等等,只要可以识别对应的进程即可,对于要结束进程的,包名比较合适,因为在结束进程时需要区分进程对应应用的包名);

2|在Adapter中getView方法中对缓存中的内容进行判断(通过保存的id或者包名)

------------------下面是我的解决代码片段

if (chosed_pkgs_list.get(position) != null) {
vh.unstall_tag.setChecked(true);
} else {
vh.unstall_tag.setChecked(false);
}


变量类型注释:

private SparseArray<String> chosed_pkgs_list;//选中的软件对象

ViewHolder vh = new ViewHolder();//ViewHolder优化类

CheckBox unstall_tag; //CheckBox标识


在getView方法中根据保存的


不过:

这样做的额弊端也很多,比如在滑动的时候进行判断后,程序运行效率会降低等,我在这里只说一种解决办法,算是比较通用的办法吧!


如果您还有更好的解决方案,欢迎在这里讨论...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值