2010-02-10 6 views
5

sé que puedo hacer algo como esto:OnPreferenceChangeListener para cada configuración de

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

}); 

Pero me gustaría añadir un detector para todos los gustos. He intentado hacer:

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

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

     } 

}); 

pero no funciona. ¿Esto es posible? Si es así, ¿qué estoy haciendo mal?

+0

[aquí] (http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being -llamado-consistentemente) es lo que estabas haciendo mal, ¿no? –

Respuesta

1

Creo que onSharedPrefererenceChanged se activa al guardar la preferencia (al hacer clic en ATRÁS o INICIO en PreferenceActivity). Creo que la manera más fácil es crear una sola clase implementando OnPreferenceChangeListener y cambiar a través de Preference.getKey(); y configurarlo como OnPreferenceChangeListener para cada preferencia.

+0

'onSharedPreferenceChanged' no se llamará en BACK/HOME. (o incluso dejando la actividad) –

+0

http://developer.android.com/guide/topics/ui/settings.html#Listening describe este enfoque. @YoushaAleayoub ¿estás seguro de que el oyente todavía está registrado después de lanzar la actividad de preferencia y que está registrado en las mismas preferencias compartidas? – skyman

6

Suponiendo que desea que el mismo detector denominado cada vez, esto podría ser una solución más 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

no funciona con la biblioteca de preferencias de soporte – user25

Cuestiones relacionadas