MultiSelectListPreference defaultValues не работает
У меня есть проект, который я строю в Android Studio. Я добавил предустановленный экран настроек с фрагментами, который компилируется и работает нормально. Я добавил MultiSelectListPreference на один из экранов предпочтений, который отображает нормально и сохраняет настройки предпочтений. Однако defaultValue не работает независимо от того, добавляю ли я его через Java или XML. Я прочитал множество других вопросов о том, как это сделать. Я знаю как. Мой вопрос: что может заставить его работать не так, как задумано?
pref_general.xml
<MultiSelectListPreference
android:key="@string/pref_key_starting_addresses"
android:summary="@string/pref_description_addresses"
android:title="@string/pref_title_addresses"
android:entries="@array/empty_array"
android:entryValues="@array/empty_array" />
PreferenceActivity.java
/**
* This method autopopulates a MultiSelectListPreference with array values
* loaded from XML.
*/
private void populateMultiSelectListPreference() {
List<TypedArray> origins = ResourceHelper.getMultiTypedArray(mContext, "origins");
CharSequence[] entries = new CharSequence[origins.size()];
CharSequence[] values = new CharSequence[origins.size()];
int counter = 0;
for (TypedArray item : origins) {
entries[counter] = item.getString(0);
values[counter] = String.valueOf(counter);
counter++;
}
final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setDefaultValue(values);
lp.setEntryValues(values);
}
arrays.xml
<string-array name="empty_array" />
<!-- a number of these are used to generate the MultiSelectListPreference
titles and entry values-->
<array name="origins_0">
<item>Text used for title</item>
<item>data 1</item>
<item>data 2</item>
</array>
Я знаю, что все работает правильно, потому что отладка показывает, что values
содержит допустимый набор и сохранение настроек работает отлично. Это означает, что lp.setEntryValues(values)
работает и что values
правильно отформатированный набор Тем не мение, lp.setDefaultValue(values)
не имеет никакого эффекта Все флажки сняты при первом запуске. Моя цель состоит в том, чтобы все они были выбраны по умолчанию.
Да, я использовал Clean and rerun 'app'
команда из меню Run в Android Studio между тестами. Кроме того, я очистил кэш приложения вручную на устройстве.
[РЕДАКТИРОВАТЬ]
С предложениями в комментариях я также попробовал следующую модификацию.
private void populateMultiSelectListPreference() {
List<TypedArray> origins = ResourceHelper.getMultiTypedArray(mContext, "origins");
CharSequence[] entries = new CharSequence[origins.size()];
CharSequence[] values = new CharSequence[origins.size()];
Set<String> defaults = new HashSet<>();
int counter = 0;
for (TypedArray item : origins) {
entries[counter] = item.getString(0);
values[counter] = String.valueOf(counter);
defaults.add(String.valueOf(counter));
counter++;
}
final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setEntryValues(values);
lp.setDefaultValue(defaults);
}
1 ответ
Быстрое предположение здесь, но мне интересно, если причина в том, что вы просто вызываете свои значения, я бы установил значения по умолчанию на последнем шаге, учитывая, что сначала должен быть инициализирован полный список:
final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setEntryValues(values);
lp.setDefaultValue(values);