Ich habe über das Thema getView mehrmals und alle Antworten gelesen. Jedoch finde ich keine Lösung für mein Problem.
Ich habe eine Liste, in der Zeilen zwei Zustände haben: gelesen oder nicht. Nun, ich möchte, dass die Elemente, die ich zum ersten Mal gesehen habe, eine andere Farbe haben und wenn ich die Liste durchblättere, ändern sie ihre Farbe in "Lesezustand".
Um dies zu tun, setze ich in der Methode getView meines Adapters ein Feld isRead, wenn die Zeile für dieses Objekt gezeichnet wird. Aber das Problem ist folgendes: Da die Methode getView mehrfach aufgerufen wird, wird das Feld als gelesen markiert und wenn die Liste auf dem Bildschirm angezeigt wird, erscheint es so, als wäre es bereits gelesen worden.
Irgendeine Idee, um dieses Problem zu beheben?
Danke
Nicht wie Sie möchten, dass es funktioniert. Der Grund dafür, dass %code% mehrere Male aufgerufen wird, besteht darin, dem Betriebssystem zu erlauben, die Zeilen zu messen, damit es weiß, wie sie angeordnet werden. Sie müssten es als gelesen markieren, wenn sie darauf klicken oder ein Kästchen oder etwas markieren.
Ich hatte das gleiche Problem und ich hatte keinerlei Bezug zu "wrap_content" in den Layouts attirbute. Obwohl dies ein alter Thread ist, konnte ich nicht herausfinden, wie ich das Problem lösen könnte. Daher habe ich es gemildert, indem ich eine Liste im Adapter hinzugefügt habe, die die bereits gezeichneten Positionen enthält, wie im folgenden Code gezeigt. Ich denke, es ist nicht das richtige, das zu tun, aber es hat für mich funktioniert.
%Vor%Ich habe über das Thema getView mehrmals und alle Antworten gelesen. Jedoch finde ich keine Lösung für mein Problem.
Ich habe eine Liste, in der Zeilen zwei Zustände haben: gelesen oder nicht. Nun, ich möchte, dass die Elemente, die ich zum ersten Mal gesehen habe, eine andere Farbe haben und wenn ich die Liste durchblättere, ändern sie ihre Farbe in "Lesezustand".
Um dies zu tun, setze ich in der Methode getView meines Adapters ein Feld isRead, wenn die Zeile für dieses Objekt gezeichnet wird. Aber das Problem ist folgendes: Da die Methode getView mehrfach aufgerufen wird, wird das Feld als gelesen markiert und wenn die Liste auf dem Bildschirm angezeigt wird, erscheint es so, als wäre es bereits gelesen worden.
Irgendeine Idee, um dieses Problem zu beheben?
Danke
Hier ist eine sehr einfache Möglichkeit, den Doppelaufruf zu vermeiden, wenn Sie nichts wissen, dass unter diesem Block das Layout verzerrt wird.
%Vor%...
%Vor%...
Ich nehme an, Sie meinen das Problem, dass getView dieselbe Ansicht mehrmals anfordert.
ListView tut dies, weil es Messungen für die Ansichten aus verschiedenen Gründen (Bildlaufleistengröße, Layout usw.) erhalten muss.
Dieses Problem kann normalerweise vermieden werden, indem Sie die Eigenschaft "wrap_content" in Ihrer Listenansicht nicht verwenden.
Ansonsten ist die Verwendung von getView, um festzustellen, ob eine Ansicht angezeigt wurde, einfach eine schlechte Idee. ListView hat viele Optimierungen, die mit der Reihenfolge umgehen, in der getView für jede Zeile aufgerufen wird. Daher gibt es keine Möglichkeit zu wissen, was passieren wird, und Ihre App wird anfangen, seltsames Verhalten zu zeigen.
Versuchen Sie, eine Beziehung zwischen der Ansicht und den anderen Daten als dem Konzept der Ansicht als Anzeige dieser Daten zu vermeiden.
Lassen Sie stattdessen einen Worker-Thread oder einen Ereignis-Listener in Ihrer Listenaktivität die Liste anzeigen, für die Elemente in der Liste dem Benutzer angezeigt wurden, aktualisieren Sie die Daten und rufen Sie DataSetChanged auf Ihrem Adapter auf.
Ich hatte das gleiche Problem und ich hatte keinerlei Bezug zu "wrap_content" in den Layouts attirbute. Obwohl dies ein alter Thread ist, konnte ich nicht herausfinden, wie ich das Problem lösen könnte. Daher habe ich es gemildert, indem ich eine Liste im Adapter hinzugefügt habe, die die bereits gezeichneten Positionen enthält, wie im folgenden Code gezeigt. Ich denke, es ist nicht das richtige, das zu tun, aber es hat für mich funktioniert.
%Vor% Nicht wie Sie möchten, dass es funktioniert. Der Grund dafür, dass getView()
mehrere Male aufgerufen wird, besteht darin, dem Betriebssystem zu erlauben, die Zeilen zu messen, damit es weiß, wie sie angeordnet werden. Sie müssten es als gelesen markieren, wenn sie darauf klicken oder ein Kästchen oder etwas markieren.
Hier ist eine sehr einfache Möglichkeit, den Doppelaufruf zu vermeiden, wenn Sie nichts wissen, dass unter diesem Block das Layout verzerrt wird.
%Vor%...
%Vor%...