android - 如何处理列表首选项的重复值?
问题描述
我正在使用列表首选项创建货币格式功能。
参赛名单如下:
<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())];
解决方案
在您的情况下,您可以使用 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。
推荐阅读
- c# - 从我的 SQL 数据库中的数据在 RichTextBox C# 中创建表
- sql - 在结果表中的 SQL 中添加附加列“TYPE”
- java - flink:无法初始化类 org.apache.hadoop.hdfs.protocol.HdfsConstants
- csv - Odoo 10 .csv 文件导入
- flutter - 非小部件类上的 ChangeNotifier
- c# - C# Outlook Mailitem ContextMenu 和 Ribbon 不能一起工作(只能分开)
- angular - ngx-extended-pdf-viewer 无法使用 Url
- xml - 使用其 XSLT 属性的名称命名元素
- ios - Xcode UI 测试计划
- angular - 从组件中获取当前应用的 Angular Material 主题