我正在尝试了解一个对投资组合进行计算的Android应用。投资组合存储在res/values/portfolio.xml
:
在应用程序中按下按钮时,将按如下方式检索投资组合数据:
String portfolioName = ((TextView) findViewById(R.id.portfolioName)).getText().toString();
Resources res = getResources();
String[] data = res.getStringArray(res.getIdentifier(portfolioName, "array", this.getPackageName()));
我在String Array资源类型上找到了解释portfolio.xml
文件语法的Android文档,并解释了为什么应将name
属性用作{的第一个参数的原因{1}}:
“文件名是任意的。
getIdentifier()
元素的<string-array>
将用作资源ID。“
但是我没有找到任何文档来解释你如何知道你应该为name
的{{1}}参数知道什么(除了它是一个字符串)。在提供的示例中,defType
有效,但它来自何处?一般来说'defType'的可能值是什么?
答案 0 :(得分:7)
getIdentifier
返回给定资源名称的资源的id
。 typeDef引用Resource
的类型(阅读更多here)。请记住,res
的内容在编译时被解析,而R.java类是根据此解析的结果生成的。最后你要找的是在那个类中声明的字段。我不知道内部实现,但如果您提供array
作为res类型,则android将仅在R.array
上查找,而不是在整个R
上查找