2011-02-02 8 views
9

Mam ListView z zestawem CHOICE_MODE_MULTIPLE. Mam również dodatkowy nagłówek do zarządzania (un) wybierając wszystkie elementy. Pytanie brzmi: czy jest to właściwy sposób? Cóż, działa, ale nie jestem pewien, czy to właściwy sposób. Jak widać poniżej znajduje się obiekt checkAllCheckBoxes , który przekazuję do nagłówka onClickListener(). Co myślisz? Byłbym wdzięczny za wszelkie odpowiedzi.Prawidłowy sposób sprawdzania wszystkich pól wyboru w ListView?

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

}; 
+0

Dzięki chłopaki za odpowiedzi, dobre punkty. No ja też zastanawiać, może lepiej byłoby dodać, że słuchacz ListView zamiast tylko na cel, jak gdyby zostały zaznaczone wszystkie pozycje i odznacz jeden z środek, h Nadal jest zaznaczony i nie wygląda dobrze – Dan

Odpowiedz

9

można zoptymalizować kod tak:

Wymień

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

przez

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

To powinien zrobić to samo i jest trochę bardziej zwięzłe. Pętla zaczyna się od 1, ponieważ nie chcesz, aby zresetować sprawdzenia stanu nagłówka, a nagłówek jest indeks 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

Nie jestem pewien, czy to prawda. W jego kodzie, gdy lv.isItemChecked (0) zwraca wartość true, używa metody setItemChecked (i, false), aby wartość boolowska była odwrócona. Począwszy od 1 również nie odwraca pierwszej wartości. – Dalmas

0

gdzie długość jest długość tablicy w tablicy i chkbox jest zaznaczyć wszystkie pola wyboru.

chkbox.setOnCheckedChangeListener (nowa 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

rozwiązanie Robby pracował dla mnie. Jak mam zrobić dodatek w tym. adapter aktualizacja jest również wymagane, w przeciwnym razie podczas przewijania listy checkbox będzie przywrócić.

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 
     } 
    } 
}; 
Powiązane problemy