你能用字符串调用字符串资源吗?

时间:2012-07-08 06:01:18

标签: android android-xml android-resources

我有一个方法可以从EditText返回大约20个可能的字符串之一。这些字符串中的每一个都有相应的响应,可以在strings.xml中的T​​extView中打印。有没有办法用context.getResources().getString(R.strings."stringFromMethod")之类的东西从strings.xml调用字符串?还有另一种方法从这样的大型列表中调用字符串吗?

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

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

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

并取整数并将其放入

context.getResources().getString(ID)

这似乎也不起作用。

3 个答案:

答案 0 :(得分: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的字符串值。

答案 1 :(得分:0)

你需要使用反射(非常丑陋但只有解决方案)加载R类,并通过字符串获取相关字段并获取它的值。

答案 2 :(得分: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]);