数字为

时间:2016-06-09 09:23:08

标签: java android string resources

使用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?

1 个答案:

答案 0 :(得分:1)

它返回一个有效的标识符,因为有一个:您的R类包含标识符。加载资源时如何解析此标识符是完全不同的事情。请注意,您应始终提供默认文件夹(res/values)中的所有字符串,以避免运行时错误。