Android Klicken Sie auf listItem prüft das falsche Kontrollkästchen

8

Ich habe ein benutzerdefiniertes ListView erstellt, indem ich SimpleCursorAdapter erweitert habe. Das Ergebnis ist IMAGE + CheckedTextView (Text + Checkbox).

Wenn ich lange auf ein Objekt klicke, funktioniert alles einwandfrei - ich bekomme die richtige ID und Details des angeklickten Objekts.

Das Problem tritt auf, wenn ich versuche, ein Element als markiert zu markieren, aber es prüft das falsche Kontrollkästchen.

Zum Beispiel: Ich habe 9 Einträge auf meiner Liste, sortiert 1-9. Wenn ich auf listItem 1 klicke, wird das Kontrollkästchen in Zeile 9 aktiviert. Wenn ich auf Punkt 4 klicke, wird das Kontrollkästchen in Zeile 6 aktiviert und wenn ich auf die mittlere Zeile klicke, wird es überprüft.

Klar fehlt mir hier etwas :) Denk dran, wenn ich lange auf die Zeile klicke (contextMenu öffnet), alles funktioniert super.

Dies ist der Listener:

%Vor%

Schätze jede Hilfe!

Lassen Sie es mich wissen, wenn Sie mich brauchen, um mehr Code zu posten.

Danke!

Übrigens, wenn ich auf mehr als eins klicke ... geht die PARTY weiter ... keine offensichtliche Reihenfolge ...

EDIT: der Adaptercode

%Vor%     
Lior Iluz 24.10.2010, 21:46
quelle

1 Antwort

11

Mayra hat Recht - das Problem hat damit zu tun, wie die ListView Ihre Ansichten wieder verwendet. Es ist nicht so, als gäbe es 9 Instanzen des CheckedTextView -Objekts, eines pro Ansicht. Stattdessen gibt es einen einzigen, der in allen Zeilen wiederverwendet wird. Daher können Sie sich nicht darauf verlassen, dass das CheckedTextView-Objekt den Status enthält, ob ein Element geprüft wird. Sie benötigen eine zusätzliche Datenstruktur, um zu halten, ob eine bestimmte Zeile geprüft wird. Zum Beispiel

%Vor%

Wenn das ith -Element wahr ist, wenn die ith -Reihe überprüft werden soll. Dann in Ihrem itemClickListener:

%Vor%

Dann in Ihrem Sichtcode:

%Vor%

Dies sollte Ihr Problem lösen. Ein alternativer Ansatz wäre es, die Logik, ob die Zeile geprüft wird oder nicht, in das Domänenobjekt zu verschieben, das die Zeile darstellt. Das wäre meine Vorliebe.

    
I82Much 24.10.2010, 23:49
quelle