How to set the Default Value of a ListPreference
JavaAndroidAndroid PreferencesPreferenceListpreferenceJava Problem Overview
i need to set the defult value for a ListPreference when the Activity starts.
I've tried with ListPreference.setDefaultvalue("value");
but it makes the firts Entry of the List as default. I need it because i must check a condition and set as default the value which satisfies that condition, so I think it can't be done from the xml file (with android:defaultValue
)
For example, suppose I have this array of values in the arrays.xml:
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
In the PreferenceScreen xml:
<ListPreference
android:title="Colour select"
android:summary="Select your favourite"
android:key="colour"
android:entries="@array/opts"
android:entryValues="@array/opts_values" />
In the Activity I'd like to do something like this:
String mycolour;
if (something) {
mycolour="1";
} else {
mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);
But it doesn't work, because it makes the first choice as default. Could you explain me how to make another one as default? Thanks.
Java Solutions
Solution 1 - Java
You don't need to programmatically handle the default value of ListPreferences
. You can do this in xml setting file. Below is an example
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
...
<ListPreference
android:title="Colour select"
android:summary="Select your favourite"
android:key="colour"
android:entries="@array/opts"
android:entryValues="@array/opts_values"
android:defaultValue="2" />
here I selected 2
as a default value. Remember defaultvalue
will be opts_values
element.
Solution 2 - Java
Have you tried:
setValueIndex(int index);
Solution 3 - Java
Sorry my bad English.
- List item
- Retrieve the list Check if the value is null. If it is null set to the default value.
Code:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
Solution 4 - Java
You can set your default value by using the key like this
<string-array name="syncFrequency">
<item name="1">Block All Calls</item>
<item name="2">Block Black List</item>
<item name="3">Block Unknown Calls</item>
<item name="4">Allow White List</item>
<item name="5">Receive All Calls</item>
</string-array>
<string-array name="syncFrequencyValues">
<item name="1">Block_All_Calls</item>
<item name="2">Block_Black_List</item>
<item name="3">Block_Unknown_Calls</item>
<item name="4">Allow_White_List</item>
<item name="5">Receive_All_Calls</item>
</string-array>
<ListPreference
android:key="prefSyncFrequency"
android:entries="@array/syncFrequency"
android:summary="%s"
android:defaultValue="Block_Black_List"
android:entryValues="@array/syncFrequencyValues"
android:title="@string/call_block_options" />
Solution 5 - Java
or you can also try colour.setValue(mycolour);
Solution 6 - Java
Just for the record if someone else has this problem:
setValueIndex(int X)
is setting the value @ index X to the default value - so it is probably what you are looking for.
Set this value AFTER you added the Values! (stupid mistake but took me half an hour)
Solution 7 - Java
((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
setValue()
is ListPreference's method, and setDefaultvalue
is Preference's method
Solution 8 - Java
Actually it's because the SharedPreferences will persist after you re-build the app. Uninstall it and try again.
Solution 9 - Java
This is an old post, but here's another way to set the default value for ListPreference
with the following line of code:
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
Solution 10 - Java
Use the xml attribute android:defaultValue="<VALUE>"
in your list tag to set the default value.
> Note: the <VALUE>
is the actual value and not the index of string
> array.
If still its not working, try below steps.
- Clear application data.
- Uninstall and reinstall the app
- Check the list preference, you will see the default value selected
Strange, I know but it worked in my case.
Solution 11 - Java
If you are using Android Jetpack Preference, known as androidx.preference:preference-ktx:1.1.1
in Kotlin, you can use:
app:defaultValue="<Value_in_string-array_with_values>"
.
Additionally: defaultValue
is not an index number, is the actual value from the values array.
I also recommend using a string resource for the default value and clearing the data, uninstalling the app, or removing the file:
<package_name_in_app_manifest>_preferences.xml
indata/data/shared_prefs/<package_name_in_app_manifest>
. Replace<package_name_in_app_manifest>
with real name likecom.example.yourapp
.
I was having the same issue and the defaultValue
wasn't updating because it already had a wrong default value of "true". Solved it by using the Android Studio File Explorer and deleting the file.
And here is my solution example:
res/xml/root_preferences.xml
<ListPreference
app:key="mic"
app:title="@string/select_mic_title"
app:useSimpleSummaryProvider="true"
app:entries="@array/mic_entries"
app:entryValues="@array/mic_values"
app:defaultValue="@string/default_mic"
/>
res/values/arrays
<!-- Mic Preference -->
<string-array name="mic_entries">
<item>@string/default_mic</item>
<item>Headband</item>
</string-array>
<string-array name="mic_values">
<item>@string/default_mic</item>
<item>Headband</item>
</string-array>
res/strings.xml
<string name="default_mic">Integrated</string>