简体   繁体   中英

How to set the Default Value of a ListPreference

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.

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.

你有没有尝试过:

setValueIndex(int index);

Sorry my bad English.

  1. List item
  2. 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
}

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" />

或者你也可以试试colour.setValue(mycolour);

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)

((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());

setValue() is ListPreference's method, and setDefaultvalue is Preference's method

Actually it's because the SharedPreferences will persist after you re-build the app. Uninstall it and try again.

这是一篇旧帖子,但这是使用以下代码行设置ListPreference的默认值的另一种方法:

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);

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.

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 in data/data/shared_prefs/<package_name_in_app_manifest> . Replace <package_name_in_app_manifest> with real name like com.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>

Result: Setting Fragment with default list value of "Integrated" given by string resource @string/default_mic

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM