Resources.getIdentifier(),deftype参数的可能值?

时间:2016-03-02 19:57:35

标签: android

我正在尝试了解一个对投资组合进行计算的Android应用。投资组合存储在res/values/portfolio.xml

enter image description here

在应用程序中按下按钮时,将按如下方式检索投资组合数据:

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'的可能值是什么?

1 个答案:

答案 0 :(得分:7)

getIdentifier返回给定资源名称的资源的id。 typeDef引用Resource的类型(阅读更多here)。请记住,res的内容在编译时被解析,而R.java类是根据此解析的结果生成的。最后你要找的是在那个类中声明的字段。我不知道内部实现,但如果您提供array作为res类型,则android将仅在R.array上查找,而不是在整个R上查找