1

我有一个方法可以从 EditText 中返回大约 20 个可能的字符串之一。这些字符串中的每一个都有一个相应的响应,要从 strings.xml 打印到 TextView 中。有没有办法使用类似的方法从 strings.xml 调用字符串context.getResources().getString(R.strings."stringFromMethod")?有没有另一种方法可以从这样的大列表中调用字符串?

我能想到的唯一方法是将每个字符串转换为 int,并使用它在字符串数组或 switch 语句中查找字符串。这两者都涉及大量的 if-else if 语句来将字符串转换为 int,并且如果添加或删除任何字符串,我会采取足够的步骤来更改我更有可能错过一个并有有趣的错误打猎。有什么想法可以干净地做到这一点吗?

编辑:忘记添加,我尝试使用的另一种方法是从

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 回答