19

I have preference.xml like this

<MultiSelectListPreference
        android:key="store_select"
        android:title="@string/setting_store_title"
        android:summary="@string/setting_store_summary"
        android:dialogTitle="@string/setting_store_dialog_title"
        android:entries="@array/store_names"
        android:entryValues="@array/stores"
        android:defaultValue="@array/stores"
        />

with my two arrays:

    <string-array name="stores">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</string-array>

<string-array name="store_names">
    <item>foodbasics</item>
    <item>nofrills</item>
    <item>metro</item>
    <item>loblaws</item>
    <item>sobeys</item>
</string-array>

I want the default behaviour to be all of the options selected, but currently nothing is selected by default. Am I doing something wrong?

wangyif2
  • 2,843
  • 2
  • 24
  • 29

4 Answers4

18

To make all MultiSelectListPreference items selected (on) by default, then include the attribute defaultsValue for the Preference, e.g.

android:defaultValue="@array/stores"

If it's not working, then make sure that you clear the application data as this will only take effect the first time the application is run.

SoftWyer
  • 1,986
  • 28
  • 33
5

I think you forgot calling PreferenceManager.setDefaultValues(this, R.xml.preference, false); in the onCreate() method of your mainActivity.

This method 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.

xxks-kkk
  • 2,336
  • 3
  • 28
  • 48
4

I know I am late but may be my answer helps someone else in future...

set

android:defaultValue="@array/empty_array"

where empty_array is an empty array.

hardillb
  • 54,545
  • 11
  • 67
  • 105
Nikhil
  • 1,023
  • 17
  • 35
0

If you are adding MultiSelectListPreference programmatically then you can simply call multiSelectListPreference.setDefaultValue():

e.g.

val preference = MultiSelectListPreference(context)
preference.setDefaultValue(setOf("US, "CN"))
Prakash
  • 4,479
  • 30
  • 42