我可以为String-array中的项目提供ID吗?

时间:2014-12-01 19:43:18

标签: android xml string

我的问题很简单,但我不知道答案。

我想要什么:

<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中,请阅读。

有什么想法吗?

3 个答案:

答案 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)
}