我正在创建具有列表首选项的货币格式功能。
条目列表如下:
<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())];
在您的情况下,您可以使用HAHSET java集合库。哈希集基本上是在需要存储唯一数据时使用的。-声明String类型的哈希集。-从列表数组中提取字符串,并使用具有条件大小和增量的for循环将它们逐一存储在哈希集中。-然后声明一个String类型的ArrayList。-使用条件hashset大小和增量创建for循环,并使用arraylist"addAll(("将hashset数据存储到新的arraylist中。-上面的步骤是因为hashset没有以索引的方式存储数据,因此在获取特定于索引的数据时会遇到麻烦。
Hashset<String> hashset = new Hashset<>();
hashset.add("your list array data");
Arraylist<String> arraylist = new Arraylist<>();
arraylist.addAll(hashset);
以下是您将如何声明和初始化hashset和arraylist。