es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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();
        }
    });
}
Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.