Notifications des changements de préférences

Sur Android, les activités qui héritent de classe PreferenceActivity s'occupent de l'affichage et de la gestion des préférences dans une application. Cependant il peut être intéressant d'être notifié d'un changement de la valeur d'une préférence afin d'effectuer une action précise. Il est nécessaire de faire 2 choses pour ceci :

Ainsi on doit avoir une signature de classe du type suivant.

public class Main extends Activity implements OnSharedPreferenceChangeListener

Puis dans la méthode onCreate(Bundle) (en général), on instancie l'objet de type SharedPreferences et lui demande de réagir aux changements des valeurs des préférences.

this.preferences = PreferenceManager.getDefaultSharedPreferences(this);
this.preferences.registerOnSharedPreferenceChangeListener(this);

Lorsqu'une préférence changera de valeur la méthode onSharedPreferenceChanged(SharedPreferences, String) sera appelée. On peut alors y mettre le code devant exécuter les actions voulues.

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Toast.makeText(this, "Changed preference: " + key, Toast.LENGTH_SHORT).show();
}