user3024760
user3024760

Reputation: 176

Android setOnPreferenceChangeListener not being called correctly

I have a ListPreferenece in my preference screen and when It changes I need to execute a method. Problem is when I first change the preferenece list nothing happens but it works the second time round...

 public static class DisplayFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

    cPPreference cPBg;
    cPPreference cPFt;
    cPPreference cPTm;
    cPPreference cPLg;
    ListPreference colorThemeList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.display_preferences);

        cPBg = (cPPreference) getPreferenceScreen().findPreference("ambilBg");
        cPFt = (cPPreference) getPreferenceScreen().findPreference("ambilFt");
        cPTm = (cPPreference) getPreferenceScreen().findPreference("ambilTm");
        cPLg = (cPPreference) getPreferenceScreen().findPreference("ambilLg");

        /**
        * When this list changes I need to exectue a method
        */
        colorThemeList = (ListPreference) getPreferenceScreen().findPreference("colorTheme");
        colorThemeList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                ThemeHandler.setTheme(cPBg, cPFt, cPTm, cPLg, colorThemeList.getValue());
                return true;
            }
        });

    }


    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);                
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {         
        setSummarys();
    }
}

Any help greatly appreciated

Upvotes: 2

Views: 967

Answers (1)

user3024760
user3024760

Reputation: 176

O.k ...found solution

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

        if (key.equals("colorTheme")) {
            ThemeHandler.setTheme(colorPickerBg, colorPickerFt, colorPickerTm, colorPickerLg, colorThemeList.getValue());
        }
    }

A simple check in the onSharedPreferneceChanged method :)

Upvotes: 3

Related Questions