How to call a function * after * onPreferenceChange?

I am new to Android development. In my application, when the user changes the preference, it is necessary to call a function to update some variables.

This is my current code:

mypref.setOnPreferenceChangeListener(
   new OnPreferenceChangeListener() {
      public boolean onPreferenceChange(Preference arg0, Object arg1) {
         if(arg1.toString().matches("...") == false) {
            ...
            return false;
         }

         ...

         updateVariables();
         return true;
     }
});

The problem is that when called updateVariables(), the preference value is not yet updated, and the function sees the old value.

private void updateVariables()
{
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    Map<String, ?> savedKeys = sharedPref.getAll();

    for (Map.Entry<String, ?> entry : savedKeys.entrySet()) {
       // for each preference...
    }
}

What would be the least invasive solution? Thank!

+5
source share
2 answers

The second argument onPreferenceChange()( arg1here) is the new meaning. I would suggest just adding this as an argument to updateVariables(), and also just passing an object to work with it.

+4
source

Using PreferenceFragmentCompat

public class FragmentSettings
extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener


@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

    addPreferencesFromResource(R.xml.app_preferences);

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}


@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    switch(key)
    {
        case "KEY1":
            // DO STUFF
            break;

        case "KEY2":
            // DO STUFF
            break;
    }
}
0

All Articles