[done] notifyDataSetChanged () aktualisiert ListActivity nicht automatisch

8

Ich habe Probleme mit notifyDataSetChanged () eines BaseAdapters. Diese Methode wird in refreshItems () aufgerufen und soll den BaseAdapter meiner ListActivity aktualisieren. Beim Aufruf von notifyDataSetChanged () passiert nichts, bis ich zum Beispiel mit den Pfeiltasten die ListView herunterscrolle. Irgendwie wird die modifizierte Methode getView () auch nicht aufgerufen. Vielleicht kannst du mir einen Tipp geben - danke! :)

%Vor%

}

    
martin 03.03.2011, 20:48
quelle

9 Antworten

9

Ich hatte das gleiche Problem (ListView Updates nur, wenn ich es scrollen, auch notifyDataSetChanged hat nicht geholfen). Ich löse es auf diese Weise: versuchen Sie einfach, Ihre "Ansicht Änderungen" in Thread, der Ihre Benutzeroberfläche erstellt, d. h.

%Vor%     
almaz_from_kazan 03.05.2012 15:52
quelle
4

Versuchen Sie, invalidate() auf Ihrer ListView aufzurufen.

    
Mannaz 03.03.2011 23:53
quelle
4

Wie Franco darauf hingewiesen hat, wird notifyDataSetChanged() verwendet, um dem ListView mitzuteilen, dass sich der Inhalt seines Adapters geändert hat, und nicht, dass er sich neu zeichnen muss. Sie ändern nur eine Einstellung, die beeinflusst, wie etwas gerendert wird. Versuchen Sie, refreshDrawableState aufzurufen, damit die Liste neu gezeichnet wird.

    
Cheryl Simon 03.03.2011 21:31
quelle
0

Ich hatte das gleiche Problem, und die Lösung für mich bestand darin, requestLayout aufzurufen () auf der ListView.

    
Roy Solberg 23.04.2012 14:01
quelle
0

Ich denke, dass es Probleme mit dem Adapter geben kann; vielleicht ist es nicht eingestellt.

Nach meiner Erfahrung gab es immer irgendeinen Grund, der die Aktualisierung von Listview (und Adapter) verhinderte.

    
cV2 09.01.2012 22:07
quelle
0

Rufen Sie AbsListView.invalidateViews () auf Ihrer Listenansicht nach BaseAdapter auf .notifyDataSetChanged ()

    
raj 20.01.2014 04:02
quelle
0

Ich habe das gleiche Problem festgestellt, und ich habe versucht, notifyDataSetChanged() auf dem Adapter aufzurufen. Außerdem habe ich versucht, refreshDrawableState() , invalidateViews() in der Ansicht aufzurufen, und keiner von denen hat funktioniert. Alle diese Methoden werden im UI-Thread aufgerufen. Dann fand ich das Wie lösche ich die Ansichten, die im RecycleBin der ListView gespeichert sind? . Schließlich funktioniert setAdapter() nur, wenn ich einen neuen Adapter erstelle.

    
almond 16.04.2015 06:41
quelle
0

Der Hauptgrund dafür ist die falsche Referenz des Adapters, auf dem Sie notifyDataSetChanged ();

aufrufen

Ich denke, Sie müssen sicherstellen, dass Sie das Adapterobjekt einmal erstellen und notifyDataSetChanged () für dasselbe Objekt aufrufen.

Sie können den Objektreferenzwert bei der Erstellung des Adapterobjekts und beim Aufruf der notifyDataSetChanged () - Methode debuggen.

    
Maddy 20.07.2015 10:50
quelle
0
%Vor%

--- Weil Sie die Werte auf temp List setzen und den Adapter übergeben und es in listview zeigt.

%Vor%

--- Weil Sie die Temperatur auf den Adapter weit einstellen, bevor Sie den Wert in temp setzen Zweitens erhält Ihre Adapterklasse möglicherweise nicht den aktualisierten Wert, wenn Sie einen neuen Wert auf temp .. setzen, da temp nicht öffentlich oder nicht auf Klassenebene oder nicht statisch ist. Setzen Sie die temp-Deklaration auf Stammebene und versuchen Sie es.

Und bitte zeigen Sie Ihren vollständigen Code so oft wie erforderlich und Logcat, wenn Sie Warnungen erhalten als auch.

    
Kang Sotheara 09.12.2015 03:58
quelle

Tags und Links