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

Android ListView中CheckBox选中状态失效:

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


有问题的代码

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

	@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
       		...
            
            viewHolder.checkBoxItemServerInfoSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public 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类型即可,修改后的代码为。

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值