例如,当item中有checkbox或button等其他控件,当我们选中某个item的控件,其他item的控件也可能被选中,因为其他item的控件,实际上还是之前item的控件,解决办法如下:
1、在adapter对应的bean中设置boolean值来记录每个item的控件是否被选中,如checkbox是否处于勾选状态,每次改变checkbox时都改变对应bean对象的boolean值,然后再来设置checkbox的状态,eg:
bean类(部分属性):
private boolean isChecked;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
然后在adapter中:
final CheckBox cb = holder.getView(R.id.cb_title);
cb.setChecked(bean.isChecked());
cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
t.setChecked(cb.isChecked());
}
});
2、创建一个list,记录每个item中的控件是否处于选中状态,是,则将相应item的position添加进list,否,则将相应item的position移出list,最后根据list是否包含控件所处item的position来设置控件的状态(晕)。eg:
private List<Integer> mPos = new ArrayList<Integer>();
adapter中:
final CheckBox cb = holder.getView(R.id.cb_title);
cb.setChecked(false);//先将checkbox设为false,没被勾选
if(mPos.contains(holder.getPosition())){//如果list中含相应position,则将checkbox勾选
cb.setChecked(true);
}
cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(cb.isChecked()){//如果checkbox被勾选了,则将相应的position加入list
mPos.add(holder.getPosition());
}
else{ //如果checkbox没被勾选,则将相应的position移出list
mPos.remove((Integer)holder.getPosition());//注意:remove有两种,一种是按位置移除,另一种是按对象移除,我们需要的是按对象移出,所以将position转化为Integer对象
}
}
});