最近項目需要使用到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));
以上代碼均是在適配器裏實現