2010-12-29 2 views

risposta

26

Questo è quello che finalmente ha funzionato per me, dove sto utilizzando un adattatore cursore, non solo un ArrayListAdapter per le mie voci di elenco:

final ListView list = getListView(); 
for (int i=0; i< getListAdapter().getCount(); i++) { 
     list.setItemChecked(i, true); 
} 

list.getChildCount non funziona perché sembra solo contare ciò che è stato disegnato immediatamente (non tutto ciò che è fuori dallo schermo) quindi childCount potrebbe essere solo 6 o 8 elementi quando l'intero elenco è composto da 100 o più elementi. Inoltre, come ho dovuto usare list.setItemChecked per ottenere gli elementi di 'rimanere controllato' - almeno nel mio caso in cui le mie voci di elenco erano istanze di CheckedTextView.

+0

Come posso lavorare con pulsanti come questo? – Manikandan

+0

grazie .. ho affrontato difficoltà perché childCount – faruk

21
for(int i=0; i < listView.getChildCount(); i++){ 
    RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i); 
    CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox); 
    cb.setChecked(true); 
} 

è necessario modificare il codice per gestire sia abilitazione e disabilitazione, ma spero che si ottiene l'idea!

Inoltre, questo controlla solo ciascuna casella di controllo, assicurarsi di restituire un ID o un oggetto dall'elenco per inviare/salvare i dati altrove.

+0

ordinati .. grazie mille Abhinav .. molto apprecato –

+1

Questo codice crea un comportamento strano quando controllo tutti gli elementi e quindi deseleziona un elemento. La soluzione di Thom Nichols è migliore. – bancer

+0

Ho dei pulsanti nella mia lista. Quando fai clic su un pulsante al di fuori di listview, ho bisogno di cambiare lo sfondo di tutti i pulsanti presenti nella listview. Ho usato il tuo codice e ho avuto un errore. Come ottenere questo. – Manikandan

0

basta aggiungere un parametro più adattatore come

Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false); 
listview.setAdapter(adapter); 

sul pulsante Seleziona tutto scatto ascoltatore aggiungere questo codice

MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true); 
listview.setAdapter(adapter); 

e il check-in adpater

if(chk) { 
    blue_check.setVisibility(View.VISIBLE); 
} else { 
    blue_check.setVisibility(View.GONE); 
} 
0

Penso che si dovrebbe eseguire questo task di lunga durata dal thread dell'interfaccia utente. Facendo clic sul pulsante in OnClickListener:

new Thread(new Runnable() { 
        @Override 
        public void run() { 
         for (int i = 0; i < list.getAdapter().getCount(); i++) { 
          final int position = i; 
          mHandler.post(new Runnable() { 
           @Override 
           public void run() { 
            list.setItemChecked(pos, true); 
           } 
          }); 
         } 
        } 
       }).start();  

e in onCreate():

this.mHandler = new Handler(); 

Ogni elemento nella visualizzazione elenco dovrebbe essere ispezionabile come CheckableRelativeLayout che implementa l'interfaccia controllabile.