onCheckedChanged mehrfach ausgelöst, Listview mit Checkbox

8

Ich habe eine ListView mit Checkbox:

  1. Oncheckedchanged(..) wird aufgerufen, wenn der Benutzer das Element in listview
  2. aktiviert / deaktiviert
  3. OncheckedChanged(..) wird erneut aufgerufen, wenn der Benutzer über onItemClick(.....) auf das Listenelement klickt

Ist das ein bekanntes Problem? wie man die Ereignisse unterscheidet.

%Vor%

BEARBEITEN

onCheckedChanged () wird

genannt
  1. Wenn kein Artikel ausgewählt wurde und der Benutzer das Kontrollkästchen
  2. anklickt
  3. Wenn die Liste aus 3 Elementen besteht und Benutzer auf andere Elemente klicken, wird onItemclick () aufgerufen und onCheckedChanged () wird dreimal ausgelöst (= no: of items in der Listenansicht)
user755 04.10.2013, 18:48
quelle

2 Antworten

6

Das ist das erwartete Verhalten:

  • onCheckedChanged(CompoundButton buttonView, boolean isChecked) wird für jedes Element aufgerufen, wenn sie aktiviert / deaktiviert sind. Android hat beschlossen, den Status aller Elemente für Sie zu verfolgen und ruft Sie jedes Mal bei jeder Änderung auf. Mit dem Parameter isChecked können Sie unterscheiden, was passiert ist.

  • onItemClick() wird immer dann aufgerufen, wenn eines der Elemente angeklickt wurde - das ist nicht unbedingt das Kontrollkästchen innerhalb des Elements, sondern irgendwo. Normalerweise wird der Artikel danach ausgewählt - auch hier nicht immer.

  • Wenn Sie wissen möchten, welches Element in der Listenansicht ausgewählt war, verwenden Sie OnItemSelectedListener.onItemSelected() . Dies ist derjenige, der aufgerufen wird, um die Auswahl (ganzes Element) zu erhalten.

Übrigens: Sie müssen das Verhalten eines Kontrollkästchens nicht manuell programmieren. Das Häkchen setzen und das Häkchen in der Box wird von Android gezogen. Sie müssen nur den Status prüfen, sobald Sie wissen, welcher ausgewählt wurde. Die onCheckedChanged Implementierung ist also soweit ich sehen kann gar nicht notwendig.

    
jboi 07.10.2013, 11:37
quelle
13

Ersetzen Sie den onCheckChangeListener durch onClickListener.

Das checkChanged wird zweimal aufgerufen, wie es aufgerufen wird, wenn Sie die Methode setChecked () aufrufen und wenn Sie auf das Kontrollkästchen klicken.

    
kapil thadani 07.10.2013 08:28
quelle