小编典典

使用Android getIdentifier()

java

我已经试过了:

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确实是我的包裹名称。drawableres它所在的文件夹,并且文件名的确是ball_red

R.java说:

        public static final int ball_red=0x7f020027;

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


所以我不能使用资源,我必须传递一个上下文,并且我这样做是这样的:在这里:

class Collection extends SurfaceView implements SurfaceHolder.Callback {

我正在创建类的新实例,并将其getContext()作为参数传递。


阅读 220

收藏
2020-09-08

共1个答案

小编典典

由于您处于活动中,因此足以编写

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名称为ball_red

例如:

public static final class drawable {
        public static final int ball_red = 0x7f020000;
 }

编辑 如果您不参加任何活动,则必须通过,context instead of resources as parameter然后执行此操作

int resId = context.getResources().getIdentifier(
    "ball_red",
    "drawable",
    context.getPackageName()
);
2020-09-08