¿Cómo detectar si se hicieron cambios en las preferencias?

Tengo una clase que amplía PreferenceActivity y muestra la pantalla de preferencias de mi aplicación. ¿Es posible comprobar si se hicieron cambios en las preferencias?

Esto ayuda…

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

Otro post relacionado: SharedPreferences.onSharedPreferenceChangeListener no se llama constantemente


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

Hacer

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

En su PreferenceActivity , es decir, convertirlo en miembro de su clase PreferenceActivity y luego hacer registerOnSharedPreferenceChangeListener(spChanged) en el método PreferenceActivity.onCreate() .

Eso es lo que hago y nunca tengo un problema.

De lo contrario es su comprobación condicional en el oyente que está en falta. Publica el código.

EDITAR:

A partir del código que publicó, debería hacer que prefs una variable de miembro de clase por lo que tiene un ámbito global.

Y hacer prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); En lugar de getSharedPreferences porque no ha creado ese archivo.

Para crear un archivo es necesario utilizar PreferenceManager . Para obtener un PreferenceManager , utilice Activity.getPreferenceManager() .

En su clase PreferenceActivity , implemente la interfaz SharedPreferences.OnSharedPreferenceChangeListener . Agregue el método onSharedPreferenceChanged requerido a su clase y regístrelo en el onCreate .

Vea el código de ejemplo aquí:

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

De los documentos oficiales:

Preferencias de lectura > Escuchando para cambios de preferencia

  • ¿Por qué Custom DialogPreference no se activa en onSharedPreferenceChanged?
  • ¿Es la lectura / escritura preferencias una operación costosa?
  • ¿Cuál es el nombre de archivo utilizado por defecto las preferencias compartidas?
  • Cómo implementar una confirmación (sí / no) DialogPreference?
  • Android: ¿cómo obtener la lista de todas las preferencias xml para mi aplicación y leerlas?
  • Actividad de preferencias de Android IllegalArgumentException: fragmento no válido para esta actividad
  • SharedPreference Cambios no reflejados en mi servicio de fondo de pantalla
  • Android: ¿Cómo puedo guardar, borrar y restaurar SharedPreferences para la prueba de unidades?
  • Anulación del diseño utilizado para una preferencia en una preferenciaActividad / preferencia Pantalla utilizando temas
  • Las preferencias compartidas se reinician cuando la aplicación se cierra con fuerza o se bloquea
  • Android: No se ha encontrado actividad para manejar el error de intención? Cómo va a resolver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.