Search code examples
androidsharedpreferences

Persistent Switch toggle not working as expected


I am trying to Persist a switch button but when i leave the activity its not persisting the value.I am setting the shared preferences on the setUpBooleanDefectsSwitch function what am i missing?

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

Solution

  • You are looking for global reference of SharedPreferences.

    try to Replace

        SharedPreferences prefs = getSharedPreferences("booleanDefects", Context.MODE_PRIVATE);
        SharedPreferences.OnSharedPreferenceChangeListener listener;
        listener = new  
    

    with

        SharedPreferences prefs = getSharedPreferences("booleanDefects", Context.MODE_PRIVATE);
        prefs.registerOnSharedPreferenceChangeListener(new 
    

    or just add this at the end after the listener

        prefs.registerOnSharedPreferenceChangeListener(listener);