Fragmente aus AsyncTask aktualisieren

  • Antworten:1
  • Bentwortet
Zaibatsi
  • Forum-Beiträge: 3

25.11.2012, 00:45:34 via Website

Hallo,

Ich versuche schon seit längerem eine kleine App zu schreiben. Dabei nutze ich "Tabs + Swipe". Die Fragment Views beinhalten TextVews.
In einem AsyncTask starte ich eine UDP Verbindung. Dieser AsyncTask wird durch ein Menü -> Dialog aus der MainActivity gestartet.

In dem AsyncTask lese ich meine nötigen Daten permanent aus und speichere sie als Shared Preference ab. Dabei werden alte Daten überschrieben.

Nun möchte ich aber die TextViews in den Fragmenten aktualisieren. Wie machte ich das am besten?
Im AsyncTask bekomme ich es nicht hin, einen Zugriff auf eine update() Methode (diese beschreibt die TextViews mit Inhalten aus den SharedPreferences) zu bekommen. Die update() Methode befindet sich in der zum Fragment gehörenden .java Klasse.

Sprich ich möchte 3 Seiten aktualisieren. Dabei jeweils die Seite, auf der ich mich aktuell befinde. Die Aktualisierung sollte bei Änderungen der Shared Preferences starten. Oder alle z.B. 60ms. Oder aus dem AsyncTask (onProgress). Nur leider sind meine Versuche bis dato erfolglos geblieben.

Über Tipps oder Code Bsp. Schnippsel wäre dankbar :)

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.11.2012, 01:26:09 via Website

Moin,

zum einen gibt es diesen Listener: http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

Aber das ist nur eine Möglichkeit, Listener allgemein sind hier z.b eine. Wo die Daten letztendlich liegen ist eher ein Detail in deinem Fall.
Deine Fragments selbst könnten aber auch ein Interface Implementieren wo du lediglich sagst update().

Dein Async Task muss diese halt kennen um sie zu benachrichtigen. Selbst nutze Ich nie AsyncTasks, da sie meiner Meinung nach mehr Probleme machen als Lösungen anbieten. Klar ist aber auch das du dein IO vom UI Thread entkoppeln musst!

Oder du nimmst einen EventBus z.b OTTO von Square: https://github.com/square/otto um deinen Fragments zu benachrichtigen. Hier ist nicht viel zu tun um das ans laufen zu bekommen mit eine @Subscribe Annotation werden deine Fragements benachrichtigt. Lies dir mal das Bsp durch dazu. Allgemein lose gekoppelt ist meist besser als 'Fest Verdrahtet' zu Programmieren.

hth,
Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Zaibatsi

Antworten