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);

この 2 番目のステートメントは正しくないため、コンパイルできません。メッセージは次のとおりです。

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

String から Resource Name Identifier へのキャストは機能すると思いますが、見つかりません。

Q: 2 番目のステートメントが正しく機能するように文字列をキャストするにはどうすればよいですか。ありがとうございました。

4

2 に答える 2

1

Resources.getIdentifier()を使用する必要がありますこれこれを参照してください

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

必要なIDを取得するために機能するはずです

于 2012-09-14T13:53:46.050 に答える
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これで、次のように map から文字列を参照できます。

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