我使用getIdentifier按名称获取原始资源的id。它不起作用,我肯定会正确使用它。有什么东西我不见了吗?
我已经验证了原始资源存在于我给它的字符串下面。我还清理了项目以确保R.java是正确的。
id = ctx.getResources().getIdentifier("file_name", null , ctx.getPackageName());
答案 0 :(得分:0)
看起来这些方法需要type/
(或defType
)参数。应该是drawable
或layout
,具体取决于资源目录。
您可以将其包含在第一个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方法获取资源标识符的问题就消失了。我不得不承认,我对改正我的问题感到有些惊讶。