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

yro*_*roc 8 android

我正在尝试了解一个对投资组合进行计算的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()));
Run Code Online (Sandbox Code Playgroud)

我在String Array资源类型上找到了解释portfolio.xml文件语法的Android文档,并解释了为什么该name属性应该用作第一个参数getIdentifier():

"文件名是任意的.该<string-array>元素name将被用作资源ID".

但是我没有找到任何文档来解释你如何知道你应该为defType参数提供什么getIdentifier(除了它是一个字符串).在提供的示例中,"array"有效,但它来自哪里?一般来说'defType'的可能值是什么?

Bla*_*elt 10

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