2010-05-03 24 views
6

Tengo un ListView con un BaseAdapter personalizado. Los elementos de la lista contienen CheckBoxes que necesitan representar una propiedad de una base de datos.Android ListView con casilla de verificación: desmarca automáticamente

Uso CheckBox.setOnCheckedChangeListener con un nuevo OnCheckedChangeListener para detectar cambios, por lo que puedo cambiar la base de datos según el estado actual de CheckBox. Bastante sencillo hasta ahora.

Sin embargo, cuando se desplaza más abajo en la lista, CheckBoxes previamente marcados se desmarcan. Sospecho que esto sucede tan pronto como las vistas se reciclan (estoy usando la técnica convertView/ViewHolder).

¿Cómo puedo detener esto? ¿Qué está mal?

Gracias de antemano.


Editar: Para hacer las cosas un poco más claro, el problema es que el reciclaje de vistas de alguna manera llama OnCheckedChangeListener # OnCheckedChanged (ButtonView, isChecked) con isChecked == false.

Respuesta

10

Aparentemente, el problema era que, al obtener la casilla de verificación usando convertView.findViewById(), los OnCheckedChangeListeners seguían intactos si la vista se reciclaba. Llamar a checkbox.setOnCheckedChangeListener (null) hizo el truco.

+1

Estaba teniendo el mismo problema al usar la casilla de verificación en la vista secundaria de una ExpandableListView, y su truco funcionó también para mí. Tuve que poner esto en getChildView (..), donde compruebo si estamos reciclando (es decir, convertView no es nulo) y configuramos OnCheckedChangeListener de la casilla de verificación para anular en ese caso. Gracias por la solución. –

+0

Tengo un problema similar, pero no sé cómo solucionarlo: http://stackoverflow.com/questions/4586442/listview-from-cursor-with-checkbox any ideas? – ekawas

+0

Sé que es un hilo antiguo, pero tengo el mismo problema. Parece que el método onCheckedChangeListener se llama aleatoriamente. ¿A qué se refiere exactamente con checkbox.setOnCheckedChangeListener (null)? ¡Es el nulo que me confunde! Eche un vistazo a mi código si lo desea: http://stackoverflow.com/questions/5444355/android-listview-with-checkbox-problem – mixkat

Cuestiones relacionadas