Soy nuevo en el desarrollo de Android. En mi aplicación, cuando un usuario cambia una preferencia, se debe llamar a una función para actualizar algunas variables.¿Cómo llamar a una función * después de * onPreferenceChange?
Este es mi código actual:
mypref.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference arg0, Object arg1) {
if(arg1.toString().matches("...") == false) {
...
return false;
}
...
updateVariables();
return true;
}
});
El problema es que cuando se llama updateVariables()
, el valor de preferencia aún no está actualizada y la función ve el valor antiguo.
private void updateVariables()
{
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Map<String, ?> savedKeys = sharedPref.getAll();
for (Map.Entry<String, ?> entry : savedKeys.entrySet()) {
// for each preference...
}
}
¿Cuál sería la solución menos invasiva? ¡Gracias!
Gracias. Pero ¿y si en 'updateVariables()' tengo que repetir muchas otras preferencias? Necesitaría muchos argumentos diferentes. – danieleds
Esto aquí solo le da el valor de preferencia que cambió. Todos los demás son iguales hasta que devuelva la devolución de llamada. De modo que solo tiene que reenviar el uno, todos los demás se pueden leer creando un objeto 'SharedPreferences' normal. * (Aparte de eso, puedes usar una 'Lista' como argumento si tienes muchos argumentos para proporcionar) * –
hmm ... tal vez lo estoy haciendo mal, pero he agregado un ejemplo de 'updateVariables() '. ¿Cómo puedo hacer el ciclo si agrego un argumento adicional con el valor actualizado? ¿Cómo puedo evitar procesar la misma preferencia 2 veces (una vez con el valor anterior de SharedPreferences, una vez con el nuevo valor de args)? Solo puedo pensar en soluciones sucias: S – danieleds