首页 > 代码库 > 77ListView中item带有CheckBox复用缓存的问题(重点)(数据错乱)

77ListView中item带有CheckBox复用缓存的问题(重点)(数据错乱)

在ListView的item中,当带有CheckBox的时候,用户点击选中第一个CheckBox的时候,往下拖动,发现下面没有选中的CheckBox也被选中了,好恶心啊!很简单,这是因为convertView复用带来的问题,在这个问题上,通常不会让CheckBox自己记住他自己的状态,选择在业务bean中记住CheckBox的状态,在业务bean中新增一个filed:

private boolean checked;

使用view的getTag方法得到ViewHolder:

lv_task_manager.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {

				TaskInfo taskInfo;
				if (position == 0) {
					// 不响应点击事件
					return;
				} else if (position == (userTaskInfos.size() + 1)) {
					// 不响应点击事件
					return;
				} else if (position <= userTaskInfos.size()) {
					taskInfo = userTaskInfos.get(position - 1);
				} else {
					taskInfo = systemTaskInfos.get(position - 1
							- userTaskInfos.size() - 1);
				}
				System.out.println("--------------" + taskInfo.toString());
				ViewHolder viewHolder = (ViewHolder) view.getTag();
				if (taskInfo.isChecked()) {
					taskInfo.setChecked(false);
					viewHolder.cb_status.setChecked(false);
				}else {
					taskInfo.setChecked(true);
					viewHolder.cb_status.setChecked(true);
				}

			}
		});
在adapter设置CheckBox的状态:

viewHolder.cb_status.setChecked(taskInfo.isChecked());

OK ,问题解决。

77ListView中item带有CheckBox复用缓存的问题(重点)(数据错乱)