La conmutación persistente del interruptor no funciona según lo esperado.
Estoy tratando de persistir un botón de interruptor, pero cuando salgo de la actividad, no se persiste el valor. Estoy configurando las preferencias compartidas en la función setUpBooleanDefectsSwitch, ¿qué me falta?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpBooleanDefectsSwitch();
SharedPreferences prefs = getSharedPreferences("booleanDefects", Context.MODE_PRIVATE);
SharedPreferences.OnSharedPreferenceChangeListener listener;
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals("boolDefects")){
boolean boolDefectsSwitch = sharedPreferences.getBoolean("boolDefects", false);
System.out.println("Boolean Defects Changed");
System.out.println(boolDefectsSwitch);
booleanDefectsSwitch.setChecked(boolDefectsSwitch);
}
}
};
}
private void setUpBooleanDefectsSwitch(){
booleanDefectsSwitch = (Switch) findViewById(R.id.booleanDefects);
final SharedPreferences booleanDefectsPrefs = getSharedPreferences("booleanDefects",Context.MODE_PRIVATE);
booleanDefectsSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = booleanDefectsPrefs.edit();
editor.putBoolean("boolDefects",isChecked);
editor.commit();
}
});
}
davy.ai
Parece que te falta agregar el listener a tus SharedPreferences en el método onCreate(). Debes agregar esta línea de código a tu método onCreate() después de la inicialización del listener:
prefs.registerOnSharedPreferenceChangeListener(listener);
Este código registrará el listener en tus SharedPreferences y se asegurará de que los cambios se persistan incluso cuando salgas de la actividad. Tu método setUpBooleanDefectsSwitch() parece establecer correctamente el valor inicial y actualizar el botón del switch, pero no persistirá el valor sin que el listener esté registrado.