Android-Adapter mehrere getView

8

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

    
xger86x 07.07.2010, 15:23
quelle

4 Antworten

14
___ qstnhdr ___ Android-Adapter mehrere getView ___ answer3196448 ___

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.

    
___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ answer5463311 ___

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%     
___ qstntxt ___

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

    
___ tag123adapter ___ Ein Entwurfsmuster, das mehrere Schnittstellen über eine gemeinsame Schnittstelle oder Klasse kompatibel macht. Einer der strukturellen Entwurfsmuster der Gruppe der vier. ___ answer8467197 ___

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%

...

    
___ answer3196452 ​​___

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.

    
___
CodeFusionMobile 07.07.2010, 15:46
quelle
1

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%     
yguaratã 28.03.2011 18:23
quelle
0

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.

    
CaseyB 07.07.2010 15:46
quelle
0

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%

...

    
Kevin Parker 11.12.2011 20:26
quelle

Tags und Links