使用Android getIdentifier()

时间:2013-03-18 22:32:25

标签: java android

我试过这个:

r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2");
Log.i("FindBall","R = "+r);

而且:

r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);

但'r'总是最终为零。

我从一个不是Activity的帮助器类中调用这一行,并且不会扩展任何东西,所以我不能简单地调用getResources(),但我可以从我的SurfaceView传递它

最终,我想用变量替换"ball_red",但首先是第一件事。这不起作用。

com.Juggle2确实是我的包名。 drawable是其所在的res文件夹,并且该文件的名称确实为ball_red

R.java说:

        public static final int ball_red=0x7f020027;

所以我不确定它为什么不起作用。


所以我不能使用Resources,我必须传递一个上下文,我这样做: 在这里:

class Collection extends SurfaceView implements SurfaceHolder.Callback {

我正在创建我的类的新实例并将其作为参数传递给它{。}}。

3 个答案:

答案 0 :(得分:120)

由于你在一个活动中,所以写

就足够了
int resId = YourActivity.this.getResources().getIdentifier(
    "ball_red",
    "drawable",
    YourActivity.this.getPackageName()
);

或者如果你没有从内部类中调用它

int resourceID = getResources().getIdentifier(
    "ball_red",
    "drawable",
    getPackageName()
);

注意

getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)

检查

同时检查您的R.java是否有名为drawable的{​​{1}}

例如:

ball_red

修改 如果您没有参加任何活动,那么您必须通过public static final class drawable { public static final int ball_red = 0x7f020000; } 然后执行此操作

context instead of resources as parameter

答案 1 :(得分:7)

对于Xamarin用户,我遇到了一个问题,即我添加了一个带有大写和小写字母的图标(例如iconVaccine.png),并指的是名字名称iconVaccine。

Xamarin将允许您这样做(即使您不应该这样做),但是当应用程序被编译时,名称被展平为小写,因此您必须引用小写变体,如下所示:

Image Name: iconVaccine.png

Xamarin reference: iconVaccine (as created in Resource.designer.cs, but will fail)

Correct Reference: iconvaccine

希望有所帮助!

答案 2 :(得分:3)

虽然Festus Tamakloe的答案是正确的,但我发现这个功能有点怪癖。

如果要在xml文件中声明string-array,则必须通过调用基本资源类型array来访问它,使用string-array会导致anid 0返回。