首页 > 解决方案 > 如何处理列表首选项的重复值?

问题描述

我正在使用列表首选项创建货币格式功能。

参赛名单如下:

<string-array>
    .....
    <item>Australia</item>
    <item>Canada</item>
    <item>United Kingdom</item>
    <item>United States</item>
    <item>Uruguay</item>
    .....
</string-array>

以及相应的值列表:

<string-array>
    .....
    <item>$</item>
    <item>$</item>
    <item>£</item>
    <item>$</item>
    <item>$U</item>
    .....
</string-array>

当我选择澳大利亚时,美国就会被选中。这是因为两个条目具有相同的值,如果存在重复值,系统将选择最后一个条目。我们应该如何轻松克服这个问题?我可以使用带有前缀或后缀的唯一值来解决重复性,但这将导致我在需要时做更多的工作来对值进行编码和解码。

我试图动态设置首选项但没有运气:

....
CharSequence[] entries = currencyPreference.getEntries();
        for (int index = 0; index < entries.length; index++) {
            if (entries[index].equals(entryCurrency)) {
                currencyPreference.setValueIndex(index);
            }
        }
.....

更新:

经过大量搜索后,我得出结论,我必须使用另一个列表来完成此操作。

<string-array name="entry_values_currency">
    <item>0</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
</string-array>
<string-array name="currency_symbols">
    <item>$</item>
    <item>$</item>
    <item>£</item>
    <item>$</item>
    <item>$U</item>
</string-array>

并得到如下符号:

String currency = getResources().getStringArray(R.array.currency_symbols)[Integer.parseInt(currencyPreference.getValue())];

标签: androidsharedpreferencesandroid-preferencespreferencelistpreference

解决方案


在您的情况下,您可以使用 HASHSET java 集合库。当您需要存储唯一数据时,基本上会使用 Hashset。- 声明一个字符串类型的哈希。- 从列表数组中提取字符串,并使用带有条件大小和增量的 for 循环将它们一一存储在哈希集中。- 然后声明一个 String 类型的 ArrayList。- 使用条件散列集大小和增量创建 for 循环,并使用 arraylist 'addAll()' 将散列集数据存储到新的 arraylist 中。- 上述步骤是因为hashset没有以索引方式存储数据,所以在获取索引特定数据时会变得很麻烦。

    Hashset<String> hashset = new Hashset<>();
    hashset.add("your list array data");

    Arraylist<String> arraylist = new Arraylist<>();
    arraylist.addAll(hashset);

这些是您将如何声明和初始化 hashset 和 arraylist。


推荐阅读