EditText in ListView wird beim Scrollen durch onTextChanged aktualisiert

7

Ich habe nach einer Antwort gesucht, aber die Lösungen scheinen nicht für mich zu funktionieren. Ich habe einen TextView und einen EditText in einem Listenelement. Ich versuche, die gespeicherten Werte für die EditTexts zu aktualisieren, wenn der Benutzer sie bearbeitet.

%Vor%

Wenn Sie dies tun, löst das Scrollen den TextWatcher aus und aktualisiert die Werte, wobei korrekter Text mit doppeltem Text von einem der anderen EditTexts überschrieben wird.

Anstelle eines TextWatcher habe ich auch diesen Code ausprobiert:

%Vor%

Und es aktualisiert auch die falschen EditTexts. Was fehlt mir hier?

Bearbeiten: Auch dies versucht:

%Vor%

Es korrigiert das Problem mit der Bildlaufänderung, das ich gesehen habe, aber jetzt, nachdem ich einen der EditTexte bearbeitet habe, ändert sich auch eine Reihe anderer.

    
Andy Stampor 06.01.2014, 20:00
quelle

2 Antworten

2

Überprüfen Sie Ihren Indexwert, wenn er mit der Zeilenposition übereinstimmt, an der Sie gerade arbeiten. Wenn Sie das Halterungsmuster verwenden, ändert sich dieser Wert abhängig von Ihrer Bildschirmgröße möglicherweise nicht von 0 zu 7-8. So etwas ist mir einmal passiert, ich glaube, ich habe es gelöst, indem ich die Methode getCount implementiert habe. Auf diese Weise gab mir die Reihe 50 die Position 50 und nicht 7 (zum Beispiel).

    
zozelfelfo 06.01.2014, 20:07
quelle
32

Das Problem hängt damit zusammen, dass Sie den zuvor hinzugefügten Textwatcher nicht aus dem Widget "EditText" entfernen. Stattdessen fügst du neue Beobachter zu der Liste hinzu. Sobald Sie versuchen, den Widget-Inhalt zu bearbeiten, werden alle Textbeobachter der Reihe nach benachrichtigt, was dazu führt, dass falsche Benutzerdetails aktualisiert werden.

EditText / TextView bietet keine Möglichkeit, zuvor hinzugefügte Textbeobachter zu entfernen, ohne ein explizite Referenz zu ihnen. Das bedeutet, dass Sie Ihren Code überarbeiten müssen, um Verweise auf Textbeobachter beizubehalten und Watcher für jede Ausführung der getView-Methode zu erstellen / hinzufügen / entfernen oder TextWatcher zu erweitern, damit Benutzerdetails nach dem Absetzen geändert werden können. Letzteres wird unten implementiert.

%Vor%

Hoffe, das hilft.

    
Maksim Solodovnikov 07.01.2014 07:37
quelle