Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to check all checkboxes in ListView?

I have a ListView with set CHOICE_MODE_MULTIPLE. I also have additional header to manage (un)selecting all the items. The question is : is it correct way to do that? Well it works, however I'm not sure thats proper way. As you see below there is an checkAllCheckBoxes object which I pass to header onClickListener() method. What do you think? Would be grateful for any responses.

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);
            }
        }
    }

};
like image 953
Dan Avatar asked Feb 02 '11 15:02

Dan


2 Answers

This should do the same thing and is a little more concise. The loop starts at 1 because you don't want to reset the checked state of the header, and the header is index 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);
        }
    }

};
like image 45
Robby Pond Avatar answered Nov 16 '22 08:11

Robby Pond


You can optimize your code like this :

Replace

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);
    }
}

by

    boolean check = lv.isItemChecked(0);
    for(int i = 0; i <= size; i++)
        lv.setItemChecked(i, !check);
like image 66
Dalmas Avatar answered Nov 16 '22 08:11

Dalmas