Ответ 1
Вы пробовали:
setValueIndex(int index);
Мне нужно установить значение 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);
Но это не работает, потому что он делает первый выбор по умолчанию. Не могли бы вы объяснить мне, как сделать другой по умолчанию? Спасибо.
Вы пробовали:
setValueIndex(int index);
Вам не нужно программно обрабатывать значение по умолчанию 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
.
Извини, мой плохой английский.
Код:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
или вы также можете попробовать colour.setValue(mycolour);
Только для записи, если у кого-то есть эта проблема:
setValueIndex(int X)
устанавливает значение @index X в значение по умолчанию - поэтому это, вероятно, то, что вы ищете.
Установите это значение ПОСЛЕ, вы добавили значения! (глупая ошибка, но мне понадобилось полчаса)
((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
setValue()
- метод ListPreference, а setDefaultvalue
- метод предпочтений
Это старый пост, но здесь другой способ установить значение по умолчанию для ListPreference
со следующей строкой кода:
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
На самом деле это потому, что SharedPreferences сохраняются после повторной сборки приложения. Удалите его и повторите попытку.
Вы можете установить свое значение по умолчанию, используя этот ключ
<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" />