I am using a PreferenceActivity to let the user set some values. I am feeding it the xml file with the defined preferences.
I have set all the android:defaultValue=""
for them.
When I start my application, I need the preferences, or if they are not set yet manually, I want the default values:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
However, when android:defaultValue="true"
I still get false
. So, it looks like the defaultValues set in the XML are not used anywhere but when initializing the preferences-screen.
I don't want to hardcode the default values in the getBoolean()
method. So, is there a way get the default-values with only defining these in 1 place?
this question is similar to mine:
initialize-preferences-from-xml-in-main-activity
Just use this code in
onCreate
method:It will load your preferences from XML, and last parameter (
readAgain
) will guarantee that user preferences won't be overwritten.Take a look into PreferenceManager.setDefaultValues in Android API for further investigation.
Be aware that if you are using
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
to retrieve preferences you have to use
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
to set defaults!
For example:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
I hope this can help someone.
in Pixel's accepted answer:
it is stated that the
false
means that defaults won't be overwritten. This is not what it does, it is just an efficiency flag to stop the parsing if your application has more than one entry point. Unfortunately the test is not made per preference file, so if you have more than one preference file you must codetrue
on all but the first.If you are worried about efficiency, you could code something like this.
If you ever add more shared preferences, just set SPL to a hight number.
Also make sure you have never used the SharedPreferences before. To make sure they are not changed (which means setDefaultValues(this,xml,false) has no effect) uninstall your App and upload it again to be sure no values are touched. This helped me.
For example extending
DialogPreference
I do this:mDefault can be: