1

EditText から約 20 の可能な文字列の 1 つを返すメソッドがあります。これらの各文字列には、対応する応答があり、strings.xml から TextView に出力されます。のようなものを使用してstrings.xmlから文字列を呼び出す方法はありcontext.getResources().getString(R.strings."stringFromMethod")ますか? そのような大きなリストから文字列を呼び出す別の方法はありますか?

私が考えることができる唯一の方法は、各文字列をintに変換し、それを使用して文字列配列またはswitchステートメントで文字列を見つけることです。どちらも、文字列を int に変換するための膨大な量の if-else if ステートメントを必要とし、文字列が追加または削除された場合に変更するのに十分な手順を実行するため、文字列を見逃して楽しいバグが発生する可能性が高くなります狩猟。これをきれいに行うためのアイデアはありますか?

編集:追加するのを忘れました。私が試した別の方法は、からresourceIDを取得することでした

int ID = context.getResources().getIdentifier("stringFromMethod", "String", context.getPackageName())

その整数を取り、それを入れます

context.getResources().getString(ID)

それも機能していないようです。

4

3 に答える 3

5

いいえ、できません。getString() には整数形式のリソース ID が必要なため、文字列を追加することはできません。

ただし、これを試すことができます:

String packageName = context.getPackageName();
int resId = context.getResources().getIdentifier("stringFromMethod", "string", packageName);
if (resId == 0) {
    throw new IllegalException("Unknown string resource!"; // can't find the string resource!
}
string stringVal = context.getString(resId);

上記のステートメントは、リソース R.string.stringFromMethod の文字列値を返します。

于 2012-07-08T06:09:35.813 に答える
0

リフレクションを使用する必要があります(かなり醜いですが唯一の解決策です)Rクラスをロードし、文字列で関連フィールドを取得してその値を取得します。

于 2012-07-08T06:05:05.103 に答える
0

これは、私がこの種の状況で行っていたことです。次のような配列を作成します。

int[] stringIds = { R.string.firstCase,
        R.string.secondCase, R.string.thridCase,
        R.string.fourthCase,... };


int caseFromServer=getCaseofServerResponse();
here caseFromServer varies from 0 to wahtever

そして、単純に

context.getResources().getString(stringIds[caseFromServer]);
于 2012-07-08T06:08:19.153 に答える