73 votes

Comment détecter si des modifications ont été apportées dans les préférences?

J'ai une classe qui étend la classe PreferenceActivity et affiche l'écran de préférence de mon application. Est-il possible de vérifier si des modifications ont été apportées aux préférences?

Cette aide...

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

D'autres related post: SharedPreferences.onSharedPreferenceChangeListener pas être appelée de façon constante


public class PreferenceClass extends PreferenceActivity {

    OnSharedPreferenceChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        SharedPreferences prefs = this.getSharedPreferences("settings", 0);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                int flag = 1;
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(listener);
        super.onCreate(null);
        addPreferencesFromResource(R.xml.settings);
    }
}

65voto

Jonathan Points 276

Dans votre PreferenceActivity de classe, de mettre en œuvre les SharedPreferences.OnSharedPreferenceChangeListener interface. Ajouter la onSharedPreferenceChanged méthode de la classe et de l'inscrire dans le onCreate.

Voir un exemple de code ici:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fw_preferences); //deprecated
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // handle the preference change here
    }

}

64voto

techiServices Points 4880

Faire

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
    // your stuff here
};

Dans votre PreferenceActivity, c'est à dire en faire un membre de votre PreferenceActivity de la classe et puis n' registerOnSharedPreferenceChangeListener(spChanged) dans la PreferenceActivity.onCreate() méthode.

C'est ce que je fais et je n'ai jamais de problème.

D'autre, c'est votre conditionnelle de vérification de l'auditeur qui est en faute. Poste le code.

EDIT:

À partir du code que vous avez posté, vous devez faire l' prefs d'une variable de membre de classe de sorte qu'il a une portée mondiale.

Et n' prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); au lieu de getSharedPreferences parce que vous n'avez pas créé de fichier.

Pour créer un fichier, vous devez utiliser PreferenceManager. Pour obtenir un PreferenceManager, utilisez Activity.getPreferenceManager().

3voto

Jonathan Lin Points 2498

De la officiel docs:

Préférences de lecture > à l'Écoute pour les changements de préférence

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X