Правильный способ проверить все флажки в ListView? - PullRequest
9 голосов
/ 02 февраля 2011

У меня есть ListView с установленным CHOICE_MODE_MULTIPLE. У меня также есть дополнительный заголовок для управления (un) выбор всех элементов. Вопрос в том, правильно ли это сделать? Ну, это работает, однако я не уверен, что это правильно. Как вы видите ниже, есть 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 ]

9 голосов
/ 02 февраля 2011

Вы можете оптимизировать свой код следующим образом:

Заменить

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);
2 голосов
/ 02 февраля 2011

Это должно сделать то же самое и немного более кратко. Цикл начинается с 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);
        }
    }

};
0 голосов
/ 26 мая 2017

Решение Робби сработало для меня. Как я должен сделать дополнение в этом. 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
        }
    }
};
0 голосов
/ 31 мая 2014

, где 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);
                }


            }

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...