我试过这个:
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()
);