Как установить значение по умолчанию для ListPreference - PullRequest
46 голосов
/ 04 марта 2011

Мне нужно установить значение по умолчанию для ListPreference при запуске Activity.Я пробовал с ListPreference.setDefaultvalue("value");, но он делает первый элемент списка по умолчанию.Мне это нужно, потому что я должен проверить условие и установить по умолчанию значение, которое удовлетворяет этому условию, поэтому я думаю, что это невозможно сделать из файла xml (с android:defaultValue)

Например, предположим, что яиметь этот массив значений в 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>

в PreferenceScreen xml:

<ListPreference
    android:title="Colour select"
    android:summary="Select your favourite"
    android:key="colour"
    android:entries="@array/opts"
    android:entryValues="@array/opts_values" />

В упражнении я хотел бы сделать что-то вроде этого:

String mycolour;
if (something) {
    mycolour="1";
} else {
    mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);

Но это не работает, потому что он делает первый выбор по умолчанию.Не могли бы вы объяснить мне, как сделать еще один по умолчанию?Спасибо.

Ответы [ 10 ]

94 голосов
/ 07 июля 2013

Вам не нужно программно обрабатывать значение по умолчанию ListPreferences.Вы можете сделать это в файле настроек 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>


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

, здесь я выбрал 2 в качестве значения по умолчанию.Помните, defaultvalue будет opts_values элементом.

28 голосов
/ 04 марта 2011

Вы пробовали:

setValueIndex(int index);
8 голосов
/ 07 февраля 2014

Извините, мой плохой английский.

  1. Элемент списка
  2. Получить список Проверьте, является ли значение нулевым.Если для него задано значение по умолчанию, равное нулю.

Код:

ListPreference dataPref = (ListPreference) findPreference("keyList");

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}
3 голосов
/ 25 июля 2013

Только для записи, если у кого-то еще есть эта проблема:

setValueIndex(int X) устанавливает значение @ index X в значение по умолчанию - так что это вероятно что вы ищете .

Установите это значение ПОСЛЕ вы добавили значения! (глупая ошибка, но заняло у меня полчаса)

3 голосов
/ 10 апреля 2012

или вы также можете попробовать colour.setValue(mycolour);

2 голосов
/ 18 ноября 2014
((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());

setValue() - это метод ListPreference, а setDefaultvalue - это метод предпочтения

1 голос
/ 23 августа 2017

Вы можете установить значение по умолчанию с помощью клавиши, подобной этой

<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" />
1 голос
/ 11 марта 2017

Это старая запись, но вот еще один способ установить значение по умолчанию для ListPreference со следующей строкой кода:

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
1 голос
/ 09 сентября 2016

На самом деле это потому, что SharedPreferences сохранится после перекомпоновки приложения. Удалите его и попробуйте снова.

0 голосов
/ 07 ноября 2018

Используйте атрибут xml android:defaultValue="<VALUE>" в теге списка, чтобы установить значение по умолчанию.

Примечание: <VALUE> - это фактическое значение, а не индекс строкового массива.

Если он по-прежнему не работает, попробуйте выполнить следующие действия.

  • Очистить данные приложения.
  • Удалить и переустановить приложение
  • Проверить настройки списка, вы увидите выбранное значение по умолчанию

Странно, я знаю, но в моем случае это сработало.

...