Android ListView Images aus dem Internet via Thread

H

Holger

Aktives Mitglied
Hallo,

hab eine kleine Frage und zwar lade ich einige Images aus dem Web in einen ListView. Die ersten Bilder werden direkt geladen und damit der Listview nicht hackt lade ich die Bilder die am Anfang nicht sichtbar sind über Threads im Hintergrund nach. Das funktioniert soweit auch sehr gut, was mich nur wundert ist warum die Bilder die ich als erstes Lade auch bei den anderen Listview-Elementen angezeigt werden solange die eigentlichen Images noch nicht nach geladen sind.

Hier der Code:

Java:
if(textNews.getImg() != null){
			holder.topnews_img.setImageBitmap(textNews.getImg());
		}
		else{
			if(pos > 4){
				Thread t = new Thread(){
					public void run(){
						videoNewsList.get(pos).setImg(getBitMapFromUrl(img_url));
					}
				};
				t.start();
				
			}
			else{
				videoNewsList.get(pos).setImg(getBitMapFromUrl(img_url));
			}
		}

Vielleicht kann mir ja wer von euch helfen, bzw. einen Denkanstoss liefern der mich der Lösung dieser Problematik näher bringt.

Beste Grüße
Holger
 
schlingel

schlingel

Gesperrter Benutzer
Ist das ein Ausschnitt aus dem Adapter? Die getView-Methode wird jedes mal aufgerufen wenn sich etwas daran ändert welche Elemente angezeigt werden sollen.

In meinen Projekten verwende ich eine Klasse die folgendes kann: Sie lädt Bilder runter und speichert diese auf der SD-Card. Beim Aufruf der Klasse wird zu erst geprüft ob es das Bild schon auf der SD-Karte gibt und nur im Zweifelsfall runter geladen.
Während des Runterladens zeig ich einen Platzhalter an. Das funktioniert einwandfrei und verlässlich.

Ansonsten ist mir bei deinem Code noch aufgefallen:
1. Wenn du das Bild setzt nachdem es runter geladen wurde, musst du dem Adapter noch sagen, dass sich die Daten geändert haben. Dann wird neu gezeichnet. (notifyDataSetChanged)
2. Bei Threads immer aufpassen, dass es nicht zu Situationen kommen kann, dass UI-Code innerhalb eines fremden Threads ausgeführt wird. Ist in deinem Code nicht der Fall aber wenn du anfängst den Views zu sagen sie sollen neu zeichnen passiert das ziemlich schnell.
 
H

Holger

Aktives Mitglied
Hätte ich vielleicht dazu schreiben sollen, der Code-Ausschnitt befindet sich in der getView()-Methode.

Ich werde mir das mal mit der notifyDataSetChanged()-Methode ansehen, sollte diese in dem Thread ausgeführt haben oder wie sähe das exemplarisch aus?

Danke schon einmal für deine schnelle Antwort!
 
M

mjdv

Bekanntes Mitglied
Hallo,

mein erster Gedanke ist, dass du gecachte Views verwendest. Dh. schaußt ob rowView, welcher als Parameter übergeben wird != null ist. Wenn ja benutzt du diese View, wo nach letzte Bild drinnen ist. Dh. du musst erstmal das Bild auf einen Default Wert setzten.

Am besten schaußt du dir mal diesen Blog Eintrag an: Multithreading For Performance | Android Developers Blog

Dort wird genau das Problem behandelt. Es gibt ein komplettes Beispiel Projekt auf googlecode. Dort wird dann auch speziell auf dein Problem eingegangen.

Ansonsten gibt es ein Prohekt namens LazyDrawables, kannste dir auch mal ansehen. Die versuchen dieses Problem allgemein zu lösen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Android Wieso kann ich keine ListView mehr zum Layout hinzufügen? Android & Cross-Platform Mobile Apps 1
W Android Kann keine ListView mehr in der MainActivtiy anzeigen, obwohl noch sehr viel Platz frei ist Android & Cross-Platform Mobile Apps 1
L ListView aktuallisiert sich nicht Android & Cross-Platform Mobile Apps 15
N Probleme mit custom dynamic ListView Android & Cross-Platform Mobile Apps 15
L Android ListView kollabiert in Scrollview Android & Cross-Platform Mobile Apps 9
A ImageButton in ListView Item bei klick ändern Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
H Android ArrayList <-> ArrayAdapter <-> ListView Android & Cross-Platform Mobile Apps 10
L Android ListView swipe zum löschen Android & Cross-Platform Mobile Apps 1
B Android ListView set custom check Image and delete Android & Cross-Platform Mobile Apps 0
M Android ListView wird nicht dargestellt Android & Cross-Platform Mobile Apps 2
Maresuke Android Android ListView Textfarbe und Texthintergrund ändern? Android & Cross-Platform Mobile Apps 5
A Android Problem mit ListView und OnItemClickListener.. Android & Cross-Platform Mobile Apps 10
S Listview Einträge aus "xml" Datei Android & Cross-Platform Mobile Apps 1
S Android Studio MySql Daten in Listview mit sub Item Android & Cross-Platform Mobile Apps 11
S Textdatei in ListView einlesen Tutorial gesucht!? Android & Cross-Platform Mobile Apps 3
kaoZ Tutorial .xml Layouting für z.B ListView elemente Android & Cross-Platform Mobile Apps 7
M Android ListView und Checkbox Android & Cross-Platform Mobile Apps 6
L TableRows in ListView darstellen Android & Cross-Platform Mobile Apps 2
M ListView mit ListAdapter füllen Android & Cross-Platform Mobile Apps 5
U Android ListView Frage Android & Cross-Platform Mobile Apps 6
L Android SearchBox für Custom Listview Android & Cross-Platform Mobile Apps 5
T Android: ListView-Adapter: Adapter wird ständig aufgerufen Android & Cross-Platform Mobile Apps 2
H Android SAX|ListView NullPointerException Android & Cross-Platform Mobile Apps 2
A Probleme mit ListView / ArrayAdapter Android & Cross-Platform Mobile Apps 3
A Koordinaten eine Images feststellen Android & Cross-Platform Mobile Apps 9
M 2 Images Faden Android & Cross-Platform Mobile Apps 5
J Userliste aus internet mit z.B xml erstellen Android & Cross-Platform Mobile Apps 5
J Android Textdatei aus dem Internet auslesen und ausgeben Android & Cross-Platform Mobile Apps 2
T Android Druckauftrag über Mobiles Internet Android & Cross-Platform Mobile Apps 2
T App Absturz bei Wechsel von WLAN zu mobilem Internet bzw. andersrum Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben