1

在我的应用程序中,我有许多用于标识区域和位置的字符串。:

<string name="r1s1">Seattle</string>
<string name="r1s2">Des Moines</string>
<string name="r1s3">Bremerton</string>
<string name="r2s1">Tacoma</string>
<string name="r2s2">Burton</string> etc, etc.

我可以使用长 switch 语句通过字符串名称轻松访问这些字符串:

switch(regionCode
{   case 1: sN=getString(R.string.r1s1);break;
    case 2: sN=getString(R.string.r2s1);break;  etc etc

我想计算这个字符串名称并用它来更直接地访问字符串:

stationNameKey="r"+regionCode+"s"+stationCode;// e. g. r1s1
stationName=getString(R.string.stationNameKey);

这第二条语句不正确,不会在这里编译是消息:

! compiler error:: stationNameKey cannot be resolved or is not a field.

我假设从 String 到 Resource Name Identifier 的转换可以工作但找不到它。

问:如何转换字符串以使我的第二个语句正常工作。谢谢你。

4

2 回答 2

1

你不能那样做。资源名称在编译时用于生成资源编号。R.string.xxx实际上是一个数字。

您可以做的是使用在 res/values/strings.xml 中创建的并行字符串数组资源,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="region_keys">
        <item>r1s1</item>
        <item>r1s2</item>
        <item>r1s3</item>
        <item>r2s1</item>
        <item>...</item>
    </string-array>

    <string-array name="region_values">
        <item>Seattle</item>
        <item>Des Moines</item>
        <item>Bremerton</item>
        <item>Tacoma</item>
        <item>...</item>
    </string-array>
</resources>

在代码中,执行以下操作:

Resources res = getResources();
String[] regionKeys = res.getStringArray(R.array.region_keys);
String[] regionValues = res.getStringArray(R.array.region_values);

// Create a hash map of key/value pairs
HashMap<String, String> regions = new HashMap<String, String>();
for (int i = 0; i < regionKeys.length; i++) {
    regions.put(regionKeys[i], regionValues[i]);
}

现在您可以从 map 引用您的字符串regions,如下所示:

String key = 'r1s1';
String regionString = regions.get(key);
于 2012-09-14T13:53:18.267 回答
1

你应该使用 Resources.getIdentifier() 看到这个这个

int resId = getResources().getIdentifier(stationNameKey,"string",null);

应该努力获得你需要的身份证

于 2012-09-14T13:53:46.050 回答