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