关于ListView中checkBox选中状态错乱问题的解决办法
来源:互联网 发布:石青软件 编辑:程序博客网 时间:2024/06/02 12:23
PS:提供这两种办法的人都没有解释到底是为什么错乱.下面来尝试分析一下:
1:首先分析下viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()…);
这句话,就是给checkBox添加一个监听器,如果checkBox的状态改变了,那么系统就会自动回调里面的onCheckedChange()方法.
而文中onCheckedChange()方法里写的是记录这次改变后checkBox状态的代码.
2:再接着分析下if(list.get(position).type == A.TYPE_CHECKED){…},这部分代码是根据list集合里的对象属性初始化view里checkBox是否应该是选择状态.
3:我上下滑动listView的时候,checkBox的状态就错乱了,根据第二点的分析,无论如何checkBox的状态都不会错乱,除非list集合里对象的属性已经被改变了,到底是什么地方改变了它?
4:文中只有一个地方写了改变list集合里checkBox对象属性的地方,那就是第一点里提到的OnCheckedChangeListener()方法。它被执行了?
怎么回事,不可能吧,打个断点,跑一下便知上下滑动listView的时候确实停了下来.
5:这便是convertView的功能,因为不管listView里显示多少条数据,都只是共用那么几个对象,然后我们的代码每一次把得到的对象重新赋值而已。
对了,正是在这赋值的时候出了问题,假设android系统给我们生成了10个共用view对象,第一个view对象在第一屏的时候需要显示成”未选择”状态,而到了第二屏的时候,却要显示成”选择”状态,但由于是共用的同一个对象,根据第一点得知当checkBox的状态改变的时候,会调用onCheckedChange()方法。
以下是在代码中的解决方案
package com.bawei.studentshop.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.bawei.studentshop.R;import com.bawei.studentshop.bean.ShoopCarResponse;import java.util.List;/** * Created by Administrator on 2016/7/15 0015. */public class ShopCarAdapter extends BaseAdapter { private Context context; private List<ShoopCarResponse.ListBean> list; private int count = 0; public ShopCarAdapter(Context context, List<ShoopCarResponse.ListBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(context, R.layout.shoopingcrtlist_item, null); holder.cb = (CheckBox) convertView.findViewById(R.id.cbCheckBox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //重点就是给每个CheckBox控件设置标记 holder.cb.setTag(position); holder.cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //先把View转型为CheckBox CheckBox c= (CheckBox) v; //获取当前控件的Tag,即与其绑定的position int po = (int) c.getTag(); //判断当前控件是否选中 if (c.isChecked()) { //若选中,就根据绑定的position找到相对应的控件设置状态为turn list.get(po).setCheck(true); }else{ //若未选中,就根据绑定的position找到相对应的控件设置状态为false list.get(po).setCheck(false); } } }); holder.cb.setChecked(list.get(position).isCheck()); holder.title.setText(list.get(position).getName()); holder.number.setText(list.get(position).getCid() + ""); holder.price.setText("¥" + list.get(position).getCost()); return convertView; } class ViewHolder { TextView title, number, price; ImageView goodsImg, jian, jia, jianTou; CheckBox cb; }}
- 关于ListView中checkBox选中状态错乱问题的解决办法
- ListView+CheckBox 选中状态错乱问题
- 关于ListView中checkBox错乱的问题
- 关于BaseAdapter,SimpleAdapter的数据显示错乱问题,选中状态错乱问题,Checkbox选中状态错乱问题总结
- 关于listview中checkbox的选中问题
- 解决checkbox在滑动时选中状态错乱的问题
- listView中有checkBox选中错乱问题解决
- ListView嵌套CheckBox滑动时CheckBox选中状态错乱
- ListView嵌套CheckBox滑动时CheckBox选中状态错乱
- 解决listView嵌套CheckBox的选中错乱
- Android ListView/GridView的item中 CheckBox状态错乱
- Android之ListView的CheckBox状态错乱
- 关于ListView+checkbox+edittext错乱问题的总结
- Android ListView在有checkbox的情况下上下滑动选中状态错误以及position错乱
- ListView+CheckBox错乱问题
- Listview Checkbox错乱问题
- Listview Checkbox错乱问题
- 解决checkbox在ListView中的选中错乱问题
- AN 外置字幕CTS crash(memcpy) && backtrac文件分析
- 44 个 JavaScript 变态题解析
- 前端开发人员必须了解的七大技能图谱
- oracle连接串的一种写法
- GaoJueYi【2016.07.15初中部 NOIP普及组 】模拟赛总结
- 关于ListView中checkBox选中状态错乱问题的解决办法
- RabbitMQ的项目示例
- 使用 Bluemix 和 DevOps Services 的十大理由
- 80端口被占用
- gdb调试学习(一) list命令的学习
- JavaScript 节流函数 Throttle 详解
- 简述面向对象的六大原则
- 华为OJ——按字节截取字符串
- 新闻网络版