检查ListView中所有复选框的正确方法?

时间:2011-02-02 15:11:48

标签: android android-listview

我有一个ListView,设置为CHOICE_MODE_MULTIPLE。我还有额外的标题来管理 (联合国)选择所有项目。问题是:这样做是否正确?嗯它有效,但我不确定这是正确的方式。如下所示,有一个checkAllCheckBoxes 我传递给头onClickListener()方法的对象。你怎么看?对任何回复都会感激不尽。

private OnClickListener checkAllCheckboxes = new OnClickListener(){
    public void onClick(View v) {
        ListView lv = getListView();
        int size = getListAdapter().getCount();
        if(lv.isItemChecked(0)){
            for(int i = 0; i<=size; i++){
                lv.setItemChecked(i, false);
            }
        } else {
            for(int i = 0; i<=size; i++){
                lv.setItemChecked(i, true);
            }
        }
    }

};

4 个答案:

答案 0 :(得分:9)

您可以像这样优化代码:

替换

if(lv.isItemChecked(0)){
    for(int i = 0; i<=size; i++){
        lv.setItemChecked(i, false);
    }
} else {
    for(int i = 0; i<=size; i++){
        lv.setItemChecked(i, true);
    }
}

通过

    boolean check = lv.isItemChecked(0);
    for(int i = 0; i <= size; i++)
        lv.setItemChecked(i, !check);

答案 1 :(得分:2)

这应该做同样的事情,并且更简洁一些。循环从1开始,因为您不想重置标头的已检查状态,标头是索引0。

private OnClickListener checkAllCheckboxes = new OnClickListener(){
    public void onClick(View v) {
        ListView lv = getListView();
        int size = lv.getAdapter().getCount();
        boolean checked = lv.isItemChecked(0);
        for(int i=1; i<size; i++) {
          lv.setItemChecked(i, checked);
        }
    }

};

答案 2 :(得分:0)

其中Length是数组中的数组长度,chkbox是select all复选框。

chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            if(chkbox.isChecked())
            {

                for(i=0;i<length;i++)
                {

                                    lv.setItemChecked(i, true);
                }

            }
            else
            {
                for(i=0;i<length;i++)
                {

                                    lv.setItemChecked(i, false);
                }


            }

        }
    });

答案 3 :(得分:0)

Robby的解决方案为我工作。因为我必须补充一点。还需要adapter更新,否则当您滚动列表时,checkbox将会恢复。

private OnClickListener checkAllCheckboxes = new OnClickListener(){
    public void onClick(View v) {
        ListView lv = getListView();
        int size = lv.getAdapter().getCount();
        boolean checked = lv.isItemChecked(0);
        for(int i=1; i<size; i++) {
          lv.setItemChecked(i, checked);

           CustomListItem it = CustomAdapter.get(i);
           it.setChk(check); // set value in adapter
        }
    }
};