2010-02-10 27 views
5

je sais que je peux faire quelque chose comme ceci:OnPreferenceChangeListener pour chaque paramètre

Preference pref = findPreference(getString(R.string.pref_vibrate_on_key)); 
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, 
       Object newValue) { 
      LogUtil.d("Working!"); 
      return true; 
     } 

}); 

Mais je voudrais en ajouter un à chaque préférence. Je essayé de le faire:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() { 

     @Override 
     public void onSharedPreferenceChanged(
       SharedPreferences sharedPreferences, String key) { 
      LogUtil.d("working!"); 

     } 

}); 

mais il ne fonctionne pas. Est-ce possible? Si oui, qu'est-ce que je fais de mal?

+0

[ici] (http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being -appelé-uniformément) est ce que vous faisiez mal - non? –

Répondre

1

Je pense que onSharedPrefererenceChanged est déclenché lors de l'enregistrement de la préférence (lorsque vous cliquez sur BACK ou HOME dans PreferenceActivity). Je pense que le moyen le plus simple est de créer une classe unique d'implémentation OnPreferenceChangeListener et de passer par Preference.getKey(); et de le définir comme OnPreferenceChangeListener pour chaque préférence.

+0

'onSharedPreferenceChanged' ne sera pas appelé sur BACK/HOME. (ou même quitter l'activité) –

+0

http://developer.android.com/guide/topics/ui/settings.html#Listening décrit cette approche. @YoushaAleayoub es-tu sûr que l'écouteur est toujours enregistré après le lancement de PreferenceActivity et qu'il est enregistré sur les mêmes SharedPreferences? – skyman

6

En supposant que vous voulez le même écouteur appelé à chaque fois, cela pourrait être une solution plus simple:

Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     // Code goes here    
     return true; 
    } 
}; 

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1)); 
pref1.setOnPreferenceChangeListener(changeListener); 

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2)); 
pref2.setOnPreferenceChangeListener(changeListener); 
+0

ne fonctionne pas avec la bibliothèque de préférences de support – user25