getIdentifier无法获取资源的id

时间:2015-06-28 20:33:07

标签: android

我使用getIdentifier按名称获取原始资源的id。它不起作用,我肯定会正确使用它。有什么东西我不见了吗?

我已经验证了原始资源存在于我给它的字符串下面。我还清理了项目以确保R.java是正确的。

id = ctx.getResources().getIdentifier("file_name", null , ctx.getPackageName());

2 个答案:

答案 0 :(得分:0)

看起来这些方法需要type/(或defType)参数。应该是drawablelayout,具体取决于资源目录。

您可以将其包含在第一个String参数中:

id = ctx.getResources().getIdentifier("drawable/file_name", null , ctx.getPackageName());

或将其作为第二个参数传递:

id = ctx.getResources().getIdentifier("file_name", "drawable", ctx.getPackageName());

此外,请务必从您传递的文件名中排除文件扩展名。如果方法仍然返回0,请检查file_name文件中的某个ID是否与R.java相对应。

答案 1 :(得分:0)

晚了,但我认为此问题与错误的应用程序ID有关。

它是在您应用的模块build.gradle文件中配置的:

android{
 defaultConfig {
     applicationId "your application id goes here"

根据我的观察,似乎生成的R文件的packageName是基于Manifest.xml文件中packageName的值的。但是,context.GetPackageName似乎正在返回已配置的applicationId的值。如果它们相同,则没有问题。如果它们与对资源的调用不同,则getIdentifier(…,...,ctx.getPackageName())将找不到标识符。

我不确定以上段落是否完全正确。我实际上观察到的是,如果我更改了applicationId以匹配Manifest.xml文件中PackageName的名称,那么我无法使用getIdentifer方法获取资源标识符的问题就消失了。我不得不承认,我对改正我的问题感到有些惊讶。