2010-04-13 8 views
13

Ich werde versuchen, ein einfaches App-Szenario zu erklären: Meine App geht direkt zu einer "Hauptansicht". In dieser Hauptansicht habe ich eine TextView eingefügt, die aktuelle Einstellungen anzeigt, die über die PreferenceManager erstellt wurden. Der Einfachheit halber sagen wir, ich habe ein Kontrollkästchen in meinen Einstellungen. Wenn ich meine App zum ersten Mal starte - die TextView in meiner Hauptansicht zeigt meine Checkbox korrekt an (true). Jetzt gehe ich zum Einstellungsmenü, es erscheint, und dann ändere ich es in false. Ich gehe zurück zur Hauptansicht und sehe keine Veränderung. Es ist immer noch wahr, auch nachdem ich es in false geändert habe. Wenn ich die App beende und dann neu starte, ist alles in Ordnung und es zeigt meine Veränderung.Nach dem Ändern einer Einstellung (einer Einstellung) wird der Text mit den Einstellungen nicht aktualisiert

Anscheinend bleibt die Hauptansicht nur im Hintergrund, während ich Einstellungen ändere? Wie kann ich die Hauptansicht neu erstellen oder aktualisieren, nachdem ich die Einstellungen geändert habe?

Antwort

5

Wenn Sie in Ihre Einstellungen gehen, sollte Ihre aktuelle Aktivität pausiert werden und bei der Rückkehr wieder aufgenommen werden (siehe Lebenszyklusdiagramm auf lifecycle diagram on the android site). Sie sollten in der Lage sein, eine Art Redraw von innerhalb von OnResume() zu starten, würde ich denken. Dadurch können die Daten auf der Seite erneut gefüllt werden. Irgendeine Art von invalidate() Call würde es vermutlich tun.

+0

Danke für Ihre Hilfe, werde ich beginnen, in das jetzt aussehen - ich schätze Ihre Zeit! – Allan

+0

Ich bin ein Anfänger, also hoffe ich, dass dies nicht zu schwierig für mich ist - (Ich werde mehr Hilfe und Beispiele von anderen auch nehmen) – Allan

22

Sie könnten OnSharedPreferenceChangeListener in Ihre Hauptaktivität implementieren:

@Override 
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
    if (PREFKEY_OF_INTEREST.equals(key)) 
     updateSomethingInMainView(); 
} 

und in onCreate() aufrufen:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
prefs.registerOnSharedPreferenceChangeListener(this); 
+0

Vielen Dank, dass Sie mir helfen. Das onResume hat es geschafft! – Allan

Verwandte Themen