我的问题很简单,但我不知道答案。
我想要什么:
<string-array name="items_array">
<item id="id1">Item1</item>
</string-array>
这就是我目前所拥有的:
<string-array name="items_array">
<item>Item1</item>
</string-array>
我希望用我的Spinner
普通名称(例如Martin )提供什么。然而在该项目的ID
中,我想要例如。 “martin93”
ID
可以将其附加到我的网址,我希望获取一些数据。但我希望用户选择“普通”名称,而不是奇怪的(例如FaceBook)网址名称。
重要提示: facebook示例仅用于解释目的,我正在尝试实现其他目的,但非常相似(使用ID我想获取真实网址的名称,这对于如果我直接把它放到Spinner中,请阅读。
有什么想法吗?
答案 0 :(得分:21)
通常你会有
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
</string-array>
<string-array name="planets_array_values" translatable="false">
<item>merc</item>
<item>ven</item>
<item>eart</item>
<item>mars</item>
</string-array>
</resources>
然后使用planets_array
和
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
String value = getResources().getStringArray(R.array.planets_array_values)[pos];
}
答案 1 :(得分:1)
不,您无法为各个数组项目提供ID
Here您可能会看到语法。
简而言之,这是提到的文档的例子:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
</string-array>
</resources>
这就是你获取字符串的方式:
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
的更新强>
为了实现您的目标,您可以存储分隔的名称和一些其他信息:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="names">
<item>Martin:martin93</item>
<item>Maria:mary1985</item>
</string-array>
</resources>
然后只需使用String.split()
方法获得两个(或更多)部分
注意可能需要选择比“&#39;”更复杂的分隔符:&#39;。
要在Spinner中直接使用它,您应该实现自己的适配器。
答案 2 :(得分:1)
如果不需要转换ID,则可以将可翻译数组条目映射为代码中的ID。这样做的好处是可以避免ID和值之间的意外订单不匹配。为此,对每个数组条目使用字符串资源:
<string-array name="my_array" translatable="false">
<item>@string/text_1</item>
<item>@string/test_2</item>
...
</string-array>
<string name="text_1">My first entry</string>
<string name="text_2">My second entry</string>
...
在代码中检索字符串资源,并将其作为键+ ID放入哈希映射:
val myArrayIdMap: HashMap<String, String> = java.util.HashMap()
myArrayIdMap[getString(R.string.text_1)] = "id-1"
myArrayIdMap[getString(R.string.text_2)] = "id-2"
...
要使用映射获取特定字符串的ID,例如,如果在微调器中使用了字符串数组,则选择侦听器可以检索ID:
...
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val selectedEntry: String = parent?.getItemAtPosition(position).toString()
val id: String = myArrayIdMap.get(selectedEntry)
}