2010-05-03 1 views
6

Ho un ListView con un BaseAdapter personalizzato. Gli elementi dell'elenco contengono CheckBox che devono rappresentare una proprietà da un database.ListView Android con Checkbox: deseleziona automaticamente

Io uso CheckBox.setOnCheckedChangeListener con un nuovo OnCheckedChangeListener per rilevare le modifiche, quindi posso modificare il database in base allo stato corrente del CheckBox. Cose piuttosto semplici finora.

Tuttavia, quando si scorre più in basso nell'elenco, i CheckBox precedentemente selezionati vengono deselezionati. Sospetto che ciò accada non appena le viste vengono riciclate (sto usando la tecnica convertView/ViewHolder).

Come posso smettere? Cosa c'è che non va?

Grazie in anticipo.


Modifica: Per rendere le cose un po 'più chiaro, il problema è che il riciclaggio di vista in qualche modo richiama OnCheckedChangeListener # onCheckedChanged (buttonView, isChecked) con isChecked == false.

risposta

10

Apparentemente il problema era che, selezionando la casella di controllo usando convertView.findViewById(), gli onCheckedChangeListeners erano ancora intatti se la vista è stata riciclata. Chiamare checkbox.setOnCheckedChangeListener (null) ha fatto il trucco.

+1

Avevo lo stesso problema quando si utilizzava la casella di controllo nella vista secondaria di un ExpandableListView e il tuo trucco funzionava anche per me. Ho dovuto inserire questo in getChildView (..), dove posso controllare se stiamo riciclando (cioè convertView non è null) e impostare OnCheckedChangeListener della casella di controllo su null in quel caso. Grazie per la soluzione. –

+0

Sto riscontrando un problema simile, ma non so come risolverlo: http://stackoverflow.com/questions/4586442/listview-from-cursor-with-checkbox qualche idea? – ekawas

+0

So che è un thread vecchio ma ho lo stesso problema. Sembra che il metodo onCheckedChangeListener sia chiamato casualmente. Cosa intendi esattamente per checkbox.setOnCheckedChangeListener (null)? È il nulla che mi confonde! Dai un'occhiata al mio codice, se lo desideri: http://stackoverflow.com/questions/5444355/android-listview-with-checkbox-problem – mixkat