Подтвердить что ты не робот

Как установить значение по умолчанию для параметра ListPreference

Мне нужно установить значение defult для 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);

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

4b9b3361

Ответ 1

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

setValueIndex(int index);

Ответ 2

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

Ответ 3

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

  • Элемент списка
  • Получить список Проверьте, не имеет ли значение значение null. Если значение null равно значению по умолчанию.

Код:

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

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

Вы можете установить свое значение по умолчанию, используя этот ключ

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