Initialize preferences from XML in the main Activity
AndroidXmlAndroid PreferencesAndroid Problem Overview
My problem is that when I start application and user didn't open my PreferenceActivity
so when I retrieve them don't get any default values defined in my preference.xml file.
preference.xml file:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="applicationPreference" android:title="@string/config"
>
<ListPreference
android:key="pref1"
android:defaultValue="default"
android:title="Title"
android:summary="Summary"
android:entries="@array/entry_names"
android:entryValues="@array/entry_values"
android:dialogTitle="@string/dialog_title"
/>
</PreferenceScreen>
Snippet from my main Activity (onCreate
method):
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pref1 = appPreferences.getString("pref1", null);
In result I end up with a null
value.
Android Solutions
Solution 1 - Android
In onCreate()
of your main Activity
just call the PreferenceManager.setDefaultValues()
method.
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
This will read your preference.xml
file and set the default values defined there. Setting the readAgain
argument to false
means this will only set the default values if this method has never been called in the past so you don't need to worry about overriding the user's settings each time your Activity
is created.
Solution 2 - Android
I'll be brief. :)
strings.xml (actually I have prefs.xml exclusively for preferences):
<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>
preferences.xml:
android:key="@string/pref_mypref_key"
android:defaultValue="@string/pref_mypref_default"
MyActivity.java:
String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
Solution 3 - Android
Your call to getString()
has null
as the second parameter. Change that to be the default value you want.