¿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…
- ¿Cuál es la diferencia entre las entradas y los valores de entrada en android listPreferences xml?
- Cómo tocar EditTextPrefences de otra actividad u otro hilo
- Archivo de preferencias del usuario vs Archivo de preferencias de la aplicación
- No se puede establecer la preferencia con PreferenceActivity
- Abrir EditTextPreference a través del código (programatically)
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); } }
- DefaultValue de archivo de preferencia de xml no está almacenado - ¿por qué?
- ¿Es seguro guardar los tokens de acceso / actualización de Oauth2 en las Preferencias compartidas de Android?
- ¿Cómo obtener preferencias de tono en tiempo de ejecución?
- Cómo establecer el resumen de preferencias edittext y hacer que se pegue
- Obtener SharedPreferences de un servicio
- Método RingtonePreference getEntry
- Crear preferencia de diseño mediante programación
- Android: ¿Cómo navegar de nuevo desde la sub-pantalla de preferencia a través de la barra de acción en xml?
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
- Android cómo aplicar forma y selector simultáneamente para Button
- Prueba el localhost en el emulador android