最近项目需要使用到ListView与Checkbox的结合,然而当我把代码写好后,感觉挺顺畅,但是运行后发现,当我选中了一个,下面会出现几个都被选中了,这就是出现了假选的现象了,困扰了好久,终于找到答案,用HashMap来记录一下CheckBox的选中状态,然后重新Checkbox的状态即可。
如下只是给出有关代码,并不是完整的,由于checkbox是用在item的布局里,所以需要在适配器里设置。
设置全局变量:
private static HashMap<Integer,Boolean> isSelected; 用来控制CheckBox的选中状况,解决出现假选的现象
在构造方法里初始化:
isSelected=new HashMap<>();
init();//下面有实现
设置初始的选中状态:
private void init() {
for(int i=0;i<myfriend_list.size();i++){
isSelected.put(i,false);
}
}
设置getter和setter方法:
public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}
public static void setIsSelected(HashMap<Integer,Boolean> isSelected){
FriendSortAdapter.isSelected=isSelected;
}
在getView方法里监听checkBox并根据原来状态来设置新的状态:i为item的选项,即getView方法的第一个参数
// 监听checkBox并根据原来的状态来设置新的状态
viewHolder.selected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(isSelected.get(i)){
isSelected.put(i,false);
setIsSelected(isSelected);
}else {
isSelected.put(i,true);
setIsSelected(isSelected);
}
}
});
//根据isSelected来设置checkbox的选中状况
viewHolder.selected.setChecked(getIsSelected().get(i));
以上代码均是在适配器里实现