2010-05-03 4 views
6

Ich habe eine ListView mit einem benutzerdefinierten BaseAdapter. Die Listenelemente enthalten CheckBoxes, die eine Eigenschaft aus einer Datenbank darstellen müssen.Android ListView mit Checkbox: automatisch deaktiviert

Ich verwende CheckBox.setOnCheckedChangeListener mit einem neuen OnCheckedChangeListener, um Änderungen zu erkennen, so dass ich die Datenbank basierend auf dem aktuellen Status der CheckBox ändern kann. Ziemlich einfache Sachen bis jetzt.

Wenn Sie jedoch weiter in der Liste nach unten scrollen, werden zuvor markierte CheckBoxen deaktiviert. Ich vermute, dass dies passiert, sobald die Ansichten wiederverwendet werden (ich verwende die convertView/ViewHolder-Technik).

Wie kann ich das stoppen? Was läuft falsch?

Vielen Dank im Voraus.


Edit: Um etwas klarer zu machen Dinge, das Problem ist, dass irgendwie das Recycling Ansichten ruft OnCheckedChangeListener # onCheckedChanged (buttonView, isChecked) mit isChecked == false.

Antwort

10

Offenbar war das Problem, dass die onCheckedChangeListeners, wenn das Kontrollkästchen convertView.findViewById() verwendet wurde, noch intakt waren, wenn die Ansicht wiederverwendet wurde. Der Aufruf von checkbox.setOnCheckedChangeListener (null) hat den Trick gemacht.

+1

Ich hatte das gleiche Problem bei der Verwendung von Kontrollkästchen in der Kind-Ansicht einer ExpandableListView, und Ihr Trick hat auch für mich funktioniert. Ich musste dies in getChildView (..), wo ich überprüfen, ob wir recycling (d. H., ConvertView ist nicht null), und setzen Sie den OnCheckedChangeListener des Kontrollkästchens in diesem Fall auf Null. Danke für die Lösung. –

+0

Ich habe ein ähnliches Problem, aber ich weiß nicht, wie es zu beheben: http://StackOverflow.com/Questions/4586442/listview-from-cursor-with-Checkbox irgendwelche Ideen? – ekawas

+0

Ich weiß, es ist ein alter Thread, aber ich habe das gleiche Problem.Es scheint wie die onCheckedChangeListener-Methode zufällig aufgerufen wird. Was genau meinst du mit checkbox.setOnCheckedChangeListener (null)? Es ist die Null, die mich verwirrt! Sehen Sie sich meinen Code an, wenn Sie wollen: http://StackOverflow.com/Questions/5444355/Android-Listview-with-Checkbox-Problem – mixkat

Verwandte Themen