ListView與Checkbox的結合來使用中出現假選的解決方案

        最近項目需要使用到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));


以上代碼均是在適配器裏實現



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章