Correct way to check all checkboxes in ListView?

后端 未结 4 537
南方客
南方客 2020-12-16 21:59

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

相关标签:
4条回答
  • 2020-12-16 22:25

    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);
    
    0 讨论(0)
  • 2020-12-16 22:26

    Robby's solution worked for me. As i have to make an addition in that. adapter update is also required, otherwise when you scroll the list checkbox will restore.

    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
            }
        }
    };
    
    0 讨论(0)
  • 2020-12-16 22:28

    where Length is array length in the array and chkbox is select all checkbox.

    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);
                    }
    
    
                }
    
            }
        });
    
    0 讨论(0)
  • 2020-12-16 22:49

    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);
            }
        }
    
    };
    
    0 讨论(0)
提交回复
热议问题