How can i save the selected value from ListPreference so it doesn't reset to the defaultValue when I restart the app in Android Studio (Java)?

197 views Asked by At

I'm trying to make a ListPreference to change the design of my app. This also works but unfortunately the setting is reset to the defaultValue when the app is restarted. Somehow I have to save this value in a SharedPreference but I just can't do it.

root_preferences.xml

<PreferenceCategory app:title="@string/design_header">

    <ListPreference
        app:defaultValue="@string/design_values_default"
        app:entries="@array/design_entries"
        app:entryValues="@array/design_values"
        app:key="designs"
        app:title="@string/design_title"
        app:useSimpleSummaryProvider="true"
        app:persistent="true"/>
</PreferenceCategory>

arrays.xml

<array name="design_entries">
    <item>@string/design_entries_day</item>
    <item>@string/design_entries_night</item>
    <item>@string/design_entries_default</item>
</array>

<array name="design_values">
    <item>@string/design_values_day</item>
    <item>@string/design_values_night</item>
    <item>@string/design_values_default</item>
</array>

SettingsActivity.java

public static class SettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);
        final ListPreference listPreference = (ListPreference) findPreference("designs");
        listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                listPreference.setValue(newValue.toString());
                String theme = String.valueOf(listPreference.getEntry());
                if (theme.equals("Day (Bright)")) {
                    AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO);
                }
                if (theme.equals("Night (Dark)")) {
                    AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
                }
                if (theme.equals("System default")) {
                    AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
                }

                return true;
            }
        });

    }
}
0

There are 0 answers