使用getIdentifier(resourceName, "string", packageName)
时遇到问题。我的字符串资源名称是动态的,并且是前缀的组合,前缀是" number _"和后缀,这是一个数字,例如" 5"。最终的字符串名称如下所示" number_5"。问题是当我使用getIdentifier方法时,它仍然返回一个resId,好像这个资源存在于我的语言环境中,但是我没有在我当前的语言环境中使用它,而是在另一个语言环境中。
我试图清理我的项目,我尝试使用getIdentifier(packageName + ":string/" + resourceName, null, null))
以及
public static int getResId(String variableName, Class<?> c) {
try {
Field idField = c.getDeclaredField(variableName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
当前区域设置的上下文是正确的,我已通过以下方式检查:
c.getResources().getConfiguration().locale
为什么getIdentifier从另一个非默认字符串资源返回有效的资源ID?
答案 0 :(得分:1)
它返回一个有效的标识符,因为有一个:您的R
类包含标识符。加载资源时如何解析此标识符是完全不同的事情。请注意,您应始终提供默认文件夹(res/values
)中的所有字符串,以避免运行时错误。