我有一个方法可以从EditText返回大约20个可能的字符串之一。这些字符串中的每一个都有相应的响应,可以在strings.xml中的TextView中打印。有没有办法用context.getResources().getString(R.strings."stringFromMethod")
之类的东西从strings.xml调用字符串?还有另一种方法从这样的大型列表中调用字符串吗?
我能想到的唯一方法是将每个字符串转换为int,并使用它来查找字符串数组或switch语句中的字符串。这两个都涉及一个巨大的if-else if语句将字符串转换为int,并且如果添加或删除任何字符串我将更有可能错过一个并且有趣的bug会采取足够的步骤来改变狩猎。干净利落的想法吗?
编辑:忘记添加,我尝试使用的另一种方法是从
获取resourceIDint ID = context.getResources().getIdentifier("stringFromMethod", "String", context.getPackageName())
并取整数并将其放入
context.getResources().getString(ID)
这似乎也不起作用。
答案 0 :(得分:5)
但是,你可以试试这个:
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]);