在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 ,问题解决。