使用Android getIdentifier()

我试过这个:

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”总是以零结尾

我从一个助手类内部调用这一行,该类不是活动,也不扩展任何内容,因此我不能简单地调用getResources(),但我可以从SurfaceView传递它

最后,我想用一个变量替换“ball\u red”,但首先要做的是。这不管用

com.Juggle2确实是我的包名drawable是它所在的res文件夹,文件名确实是ball\u red

R.java说:

公共静态最终整型球\u red=0x7f020027;

所以我不知道为什么它不起作用


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

类集合扩展了SurfaceView实现了SurfaceHolder.Callback{

我正在创建一个类的新实例,并将其作为参数传递

既然你在一个活动中,写就足够了

int resId=YourActivity.this.getResources().getIdentifier(
“红色球”,
“可提取”,
YourActivity.this.getPackageName()
);

或者如果不是从内部类调用它

int resourceID=getResources().getIdentifier(
“红色球”,
“可提取”,
getPackageName()
);

注意

getIdentifier()如果未找到此类资源,则返回0。(0不是有效的资源ID。)

检查

在R.java中还检查是否有一个名为“ball\u red”的drawable

例如:

公共静态最终类可绘制{
公共静态最终整数球_red=0x7f020000;
}

编辑
如果您不在任何活动中,则必须传递上下文而不是资源作为参数,然后执行此操作

int resId=context.getResources().getIdentifier(
“红色球”,
“可提取”,
context.getPackageName()
);

发表评论