2012-04-14 3 views
0

Ich arbeite an einer Android-Anwendung, die von anderen mobilen per SMS gesteuert werden kann. Ich verwende PreferenceScreen als Layout (Einstellungen Teil der App). Das Layout wird aktualisiert, wenn onResume() aufgerufen wird.Update-Schnittstelle dynamisch

Wenn der Befehl (SMS) über ein anderes Mobiltelefon gesendet wird, schnüffelt der im Hintergrund laufende Dienst die eingehenden SMS und ändert die in SharedPreferences gespeicherten Einstellungen. Um diese Änderungen zu sehen, muss meine Aktivität den Code in onResume ausführen. Wenn ich zurück zur vorherigen Aktivität gehe und zurückkomme, kann ich die Änderungen sehen.

Ich möchte die Änderungen angezeigt werden, sobald die SharedPreferences durch Ausführung von Service geändert wird. Was soll ich tun, damit es geschieht?

Antwort

1

Etwas wie folgt aus:

public class MyActivity extends Activity implements OnSharedPreferenceChangeListener 
{ 
    public static final String PREFS_NAME = "MyPrefsFile"; 

    @Override 
    protected void onCreate(Bundle state) 
    { 
     /* get shared preferences */ 
     SharedPreferences mySharedPreferences = getSharedPreferences(PREFS_NAME, 0); 

     /* register listener for changes to the values within the shared preferences */ 
     mySharedPreferences.registerOnSharedPreferenceChangeListener(this); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    { 
     /* perform application processing */ 
     ... 

     /* update layout */ 
     View myView = findViewById(id.my_view); 

     /* invalidate the view causing it to be redrawn */ 
     myView.invalidate(); 
    } 
} 
+0

thanku für schnelle Antwort. Dieser Code funktioniert, wenn die Änderung an dem Objekt vorgenommen wird, das mit 'mySharedPreferences' verknüpft ist. In meinem Service erstelle ich eine neue Instanz von SharedPreferences. Wenn die Änderungen also innerhalb des Dienstes vorgenommen werden, wird 'onSharedPreferenceChanged' in der aktuellen Aktivität nicht aufgerufen! –

+0

Überprüfen Sie hier: [Wie Android Service mit der Aktivität kommunizieren] (http://StackOverflow.com/Questions/2463175/How-Thave-android-Service-Communicate-with-Activity) – flukey

+0

Ich kam mit Ihrem Code aber, das war das Problem http://stackoverflow.com/questions/10150480/registeronsharedpreferencechangelistener-not-working-for-changes-made-in-differe –