Schwierigkeiten mit der Architektur (List, Adapter, Service, Cache)

  • Antworten:1
  • Bentwortet
Marco S.
  • Forum-Beiträge: 105

11.02.2011, 17:15:28 via Website

Hallo zusammen,

ich habe da ein für mich schwieriges Szenario, und ich würde mich freuen wenn mir jemand bei Konzept und/oder Architektur behilflich sein könnte.

Im Grunde genommen müsste es für einige von Euch Android-Alltag sein :)

Also:

Ich habe eine Activity, eine Liste, diese ist leer, wir sind ja noch in der onCreate.
Mittels Binder verbinde ich mich mit dem Service.
In onServiceConnected starte ich eine Methode vom Service (Request zum Backend, Response vom Backend).
Nun habe ich meine Daten (noch keine Grafiken!), und diese halte ich im Applicationkontext (und spare mir damit den parcelable Overhead).
Mittels Message bekommt meine Activity nun gesagt, dass Daten bereit liegen.
Die Daten gibt die Activity an den Adapter der Liste, und dieser fängt dann an die Daten zu painten.
Nun gibt auf einen Schlag alle Daten für den Benutzer zu sehen, eine Liste, jede Menge Einträge.

ABER:
Vom Backend habe ich keine Grafiken bekommen, nur IDs.

Nun muss ich im Hintergrund die Grafiken holen und fürs nächste mal im Cache halten.
Gehen wir der Einfach halber davon aus dass der Cache schon irgendwie die Grafiken anhand der ID holt (ob aus dem Cache oder vom Server spielt dabei keine Rolle).
Mein Problem ist nun, wie bekomme ich die Grafiken in die Liste und vor allem wie bekomme ich sie angezeigt?

Der Cache hat ja keine Referenz auf die Datenliste des Adapters.

Auch ist mir unklar wie es mit den Messages laufen soll.

Und wie kann ich dem Adapter sagen, dass er den jeweiligen View neu malen soll, da ja nun eine Grafik bereit liegt ?


Ich würde es schon irgendwie hinbekommen, aber lieber wäre mir ein Android-konformes Konzept.

Ich bin ja nicht der erste der sowas macht, oder?


Viele Grüße & schönes Wochenende,
Marco Schmitz

Antworten
Marco S.
  • Forum-Beiträge: 105

18.02.2011, 11:33:00 via Website

die lösung ist recht einfach und sehr elegant.

im handler, an der stelle wo ich die message "backend hat mir alles erfolgreich geliefert - daten liegen im application-context" bekommt, rufe ich über den binder eine neue methode im service auf.

die bekommt die datenliste aus dem application-context als parameter, und holt sich dann selber die elemente der liste, und mittels setter wird dann die nachgeladene bitmap gesetzt.

mittels einer message "eins der icons erfolgreich geladen" springe ich in die activity zurück, und im handler reagiere ich auf diese message, in dem ich auf dem adapter der liste ein simples adapter.notifyDataSetChanged(); aufrufe.

da ja alles call-by-reference ist, kann der adapter als auch der service auf das gemeinsame daten-listen-objekt im application-context zugreifen.

viele grüße
marco schmitz

Antworten