在我的应用程序中,我有许多用于识别区域和位置的字符串。:
<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.
我可以使用long 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到资源名称标识符的强制转换可以工作但无法找到它。
问:如何转换字符串以使第二个语句正常工作。谢谢。
答案 0 :(得分: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]);
}
现在,您可以在地图regions
中引用字符串,如下所示:
String key = 'r1s1';
String regionString = regions.get(key);
答案 1 :(得分:1)