web-dev-qa-db-fra.com

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

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

CA aide...

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

Autre article lié: SharedPreferences.onSharedPreferenceChangeListener n'étant pas appelé de manière cohérente


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);
    }
}
69
mixkat

Faire

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // your stuff here
    }
};

Dans votre PreferenceActivity, c.-à-d. En faire un membre de votre classe PreferenceActivity puis faites registerOnSharedPreferenceChangeListener(spChanged) dans la méthode PreferenceActivity.onCreate().

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

Sinon, c'est votre vérification conditionnelle dans l'auditeur qui est en cause. Postez le code.

MODIFIER:

A partir du code que vous avez publié, vous devriez faire de prefs une variable de membre de classe afin qu'elle ait une portée globale.

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

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

61
techiServices

Dans votre classe PreferenceActivity, implémentez le SharedPreferences.OnSharedPreferenceChangeListener interface. Ajoutez la méthode onSharedPreferenceChanged requise à votre classe et enregistrez-la dans le fichier onCreate.

Voir 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
    }

}
63
Jonathan