Bild separat laden

  • Antworten:2
p a
  • Forum-Beiträge: 131

07.12.2011, 09:12:50 via Website

Hi,

ich hab grad nen kleinen Knoten im Hirn, ich will ne "Ansicht mit Bild" laden und das Bild kommt aus dem Netz, jetzt hab ich natürlich das Problem dass die Ansicht hängt bis das Bild komplett geladen ist. Wär natürlich viel schöner wenn er die Ansicht direkt lädt, mit einem lokalen Platzhalterbild und dann das eigentlich Bild nachlädt.
Ich weiss bestimmt auch wie das geht, aber ich komm grad nicht drauf, hat mal jemand nen Tipp für mich?

Antworten
Philip M.
  • Forum-Beiträge: 90

07.12.2011, 09:30:14 via Website

Guck dir mal den AsyncTask an, das sollte dir eigentlich weiterhelfen (stand vor einigen Wochen vor dem selben Problem wie du und konnte es hiermit perfekt lösen :-))

Dort hast du nämlich 3 Methoden die dir weiter helfen:

  • protected void onPreExecute() Was du vor dem Thread machen willst (z.B. das setzen eines Platzhalters)
  • protected Bitmap doInBackground(String... params) Das was Asynchron zum UI-Thread laufen soll (z.B. das laden der Bilder aus dem Web)
  • protected void onPostExecute(Bitmap result) Was du nach dem Thread machen willst (zum Beispiel das setzen des Bildes aus dem Web)

  • In der Methode onPostExectue wird dir in "result" das übergeben, was du bei der Methode doInBackground zurück gibst.
  • In der Methode doInBackground darfst du die UI nicht verändern weil es ein anderer Thread ist.
  • Du solltest die Bilder cachen, damit sie nicht immer wieder neu geladen werden müssen.
  • Die Parameter bzw. Rückgabewerte kannst du teilweise anpassen, da der AsyncTask generisch ist.

Du kannst es auch mit einem Thread und einem Handler machen, aber das ist um einiges umständlicher wie ich feststellen musste.

— geändert am 07.12.2011, 09:46:29

Antworten
p a
  • Forum-Beiträge: 131

07.12.2011, 10:24:15 via Website

Ja, danke, so im wesentlichen ist der AsyncTask mir auch kein Fremdling, wie gesagt, ich brauchte nur einen Wink in die entsprechende Richtung.
Die Umsetzung hat jetzt glaub ich unter 5 Minuten gedauert.

Antworten