holder.cb.setId(postion);
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//如何获取该CheckBox所在的list item的索引,以便更新mList对应的数据;
int index = buttonView.getId();
mList.get(index);
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//如何获取该CheckBox所在的list item的索引,以便更新mList对应的数据;
int index = buttonView.getId();
mList.get(index);
}
要么拿一个专门的list或者数组来存放,要么就直接在adapter关联的list的数据结构中加上isChecked这一项
,而且传进来的参数还是相反的。值得注意的是,是在消失的时候调用的,还没有再次显示,应该跟GetView无关吧
那么你在getview加一个判断
if(isChecked)
{
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
这时问题就出现了,假设第一个list item的CheckBox是false, 而第六个是true. 在显示第六个的时候就会执行getView中的holder.cb.setChecked(mChecked); (此时mChecked为true)。 别忘了这时使用的是第一个list item的convertView, 所以就触发了第一个的OnCheckedChangeListener()方法,强制将第一个设成了true这是我的理解,但我还没找到什么好的方法
int resource = R.layout.item;//每个item布局
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for(int i=0;i<6;i++){
LinearLayout item = new LinearLayout(this);
li.inflate(resource, item , true);
CheckBox cb = (CheckBox)item.findViewById(R.id.cb);
cb.setOnCheckedChangeListener(cbOnChange);
items.add(item);
}
holder.cb.setChecked(mChecked) 应该放到holder.cb.setId(postion) 的后面,
再次感谢各位,尤其是AspireHouse同学:)