我成功在新项目中使用此代码,但是,当在我的实际代码中复制它时,显示的图像不是好的 一切都做得很好(图像在文件夹中可绘制,每个数据都声明好,......) 图像以“phoXX”开头,其中XX是一个整数(介于0和62之间) 我有一个imageview(名为imageView1)和一个TextView(调试,命名为textView1),其中我显示了ID(在检查R.java时哪一个很好...)
这是我的代码:
private Context mContext;
ImageView imageC=(ImageView)findViewById(R.id.imageView1);
TextView Tex=(TextView)findViewById(R.id.textView1);
Drawable drawableX = this.getResources().getDrawable(android.R.drawable.ic_dialog_alert);
Random random_monster = new Random();
int lerand = random_monster.nextInt(62);
int id = mContext.getResources().getIdentifier("drawable/pho"+lerand, "drawable",mContext.getPackageName());
if (id>0)
{
drawableX = getResources().getDrawable(id);
}
imageC.setImageDrawable(drawableX);
Tex.setText(Integer.toString(lerand)+":"+id);
所以,正如我所说,显示一个图像,显示一个数字,但例如pho29显示名为pho48的图像(如果你问,pho48不会显示pho29)
ID是2130837535,这是R.java中出现的内容:
public static final int pho29 = 0x7f02001f;
pho48是:
public static final int pho48 = 0x7f020034;
对于某些数字,显示的图像是好的,对于其他,图像不是好的(并且它总是相同的图像显示相同的数字....我的意思是pho29,它总是pho48哪个在我的每个活动中显示)
我真的不明白我想念的是什么......感谢所有的帮助
编辑:下面有一些匹配(左边是应该显示的数字,右边是显示的数字)
2->6
17->32
19->34
24->41
43->43
51->51
36->55
37->56
38->57
56->56
59->59
61->61
如您所见,56和37显示56 ....
答案 0 :(得分:1)
如果相同的代码和图像资源集在一个项目中工作正常而在另一个项目中不正常,则应考虑已损坏项目中的已编译资源是否实际正确。我发现在Eclipse中使用自动构建功能时,我希望它们不会重新编译资源。例如,如果我在部署应用程序之前做的最后一件事就是更改资源。保存代码文件更改似乎更难以推动构建系统。
你应该尝试干净然后重建。在Eclipse中,在Project菜单上选择“Clean ...”并选择你的项目(或者让它们全部清除)。然后,Eclipse将执行完全重建。或者在命令行上运行“ant clean”,然后运行“ant debug”。
你也在使用这一行:
int id = mContext.getResources().getIdentifier("drawable/pho"+lerand, "drawable",mContext.getPackageName());
以下是API规范:
public int getIdentifier (String name, String defType, String defPackage)
您无需在名称字段中指定类型,因为您在defType字段中指定了该类型。我不认为它会解决你的问题,但这至少应该起作用:
int id = mContext.getResources().getIdentifier("pho"+lerand, "drawable",mContext.getPackageName());
答案 1 :(得分:0)
尝试在其定义中放置没有源的imageview,有时当imageview在xml中设置源,在运行时更改其drawable不起作用时,我有问题,第一个图像始终可见