gpt4 book ai didi

java - MultiSelectListPreference defaultValues 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:52 26 4
gpt4 key购买 nike

我正在 Android Studio 中构建一个项目。我添加了预构建的首选项屏幕,其中包含可以正常编译和运行的 fragment 。我将 MultiSelectListPreference 添加到首选项屏幕之一,该屏幕显示良好并存储首选项设置。但是,无论我通过 Java 还是 XML 添加 defaultValue 都不起作用。我已经阅读了有关如何执行此操作的其他问题的分数。我知道该怎样。我的问题是什么可能导致它无法按预期工作?

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);
}

数组.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 包含有效的 Set 并且保存首选项工作正常。这意味着 lp.setEntryValues(values) 可以工作,并且 values 是一个格式正确的 Set。但是,lp.setDefaultValue(values) 没有任何效果。第一次运行时这些复选框均未选中。我的目标是默认选择它们。

是的,我在测试之间使用了 Android Studio 的“运行”菜单中的清理并重新运行“app” 命令。此外,我还手动清除了设备上的应用缓存。

[编辑]

根据评论中的建议,我也尝试了以下修改。

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);
}

最佳答案

这里快速猜测,但我想知道原因是否只是您调用值的顺序,考虑到应首先初始化完整列表,我会在最后一步中设置默认值:

final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setEntryValues(values);
lp.setDefaultValue(values);

关于java - MultiSelectListPreference defaultValues 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com