PullToRefreshListView 内嵌checkbox 数据丢失问题

在PullToRefreshListView 内部内嵌了Checkbox如下图所示:


原本设计思路是:对CheckBox 进行 setOnCheckedChangeListener 监听

当CheckBox 的状态变化的时候能即时将更新积分,并将 该item的checkbox 状态存到 ListView 中。

如下为checkbox  的程序片段

viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        //更新兑换所需积分
        Message msg = new Message();
        msg.what = 1;//更新标志
        msg.arg2 = position;//记录位置
        Log.e("test","CheckBox事件发生了-------------------------");
        if (isChecked) {//增加
            //Toast.makeText(context,"商品被选中了",Toast.LENGTH_SHORT).show();
            list.get(position).put("isChecked", true);
            msg.arg1 = Integer.valueOf(list.get(position).get("goodPoints").toString());//arg1参数设为单件商品的积分

        } else {//减少--1、清除改商品的所有积分 2、重置购买数量为1
            list.get(position).put("isChecked", false);
            msg.arg1 = -Integer.valueOf(list.get(position).get("goodPoints").toString()) *
                    Integer.valueOf(list.get(position).get("chooseNum").toString());//arg1参数= 单件商品的积分*购买数量
            list.get(position).put("chooseNum", 1);//重置购买数量
            //notifyDataSetChanged();//更新
        }
        notifyDataSetChanged();//更新
        handler.sendMessage(msg);

    }
});
但在实际运行的时候却发现了问题

但列表中项目较多,往下滑动列表的时候,会发现前面选择的项会自动清除

如下图:


前面勾选的商品已清除了(积分还在)

解决方法:

经尝试,发现大概原因如下:

因为每个item对应一个convertview,当该商品当前对应的convertview滑出可视页面时,convertview被重用,且其内部的数据进行了重置。

那么假如初始化的CheckBox的状态为false,那么便也会触发setOnCheckedChangeListener 动作,从而对该item的checkbox数据进行了修改,并保存到listview中

所以,问题的根源应该是item滑出页面的时候会触发setOnCheckedChangeListener 动作。

解决方法:对CheckBox的状态捕获不用setOnCheckedChangeListener 方法,而改用setOnClickListener方法

经测试,解决了问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值