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);
Другие вопросы по тегам