我已尝试过其他类似的stackoverflow问题的答案,但无法弄清楚我做错了什么。我有一个sqlite数据库,其中包含几个列,其中一列是存储在res / drawable中的png文件的文件名。我可以使用sqlite中的项目列表填充我的列表视图,点击后我可以显示为所选项目存储的所有详细信息 - 除了图像永远不会显示。如果我只是显示图像文件的名称,它会显示该选定项目的正确名称。但我无法让图像本身显示出来。
如果我将图像src文件硬编码到布局xml中,它会正确显示,但是,我需要能够根据选择的项目来更改图像。
以下是我尝试实现此目的的三种方法(使用硬编码名称,例如使用res / drawable / acorn.png文件进行简化)。这些都不起作用。显示所有其他正确的项目详细信息,但没有图像。我在这里做错了什么想法?
布局xml包括:
<ImageView
android:id="@+id/wordimage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxWidth="200dp"
android:maxHeight="200dp"
android:scaleType="center"
android:contentDescription="image for this word"
/>
尝试1:
int imageid = getResources().getIdentifier("com.brohoward.androidapps.itzadatabase:drawable/acorn.png", null, null);
ImageView imagenow = (ImageView) findViewById(R.id.wordimage);
imagenow.setImageDrawable(getResources().getDrawable(imageid));
尝试b:
int imageid = getResources().getIdentifier("com.brohoward.androidapps.itzadatabase:drawable/acorn.png", null, null);
ImageView imagenow = (ImageView) findViewById(R.id.wordimage);
imagenow.setImageResource(imageid);
尝试c:
ImageView imagenow = (ImageView) findViewById(R.id.wordimage);
imagenow.setImageBitmap(BitmapFactory.decodeFile("com.brohoward.androidapps.itzadatabase:drawable/acorn.png"));
提前感谢!
答案 0 :(得分:0)
不要在调用getIdentifier中包含.png:
int imageid = getResources().getIdentifier("com.brohoward.androidapps.itzadatabase:drawable/acorn", null, null);
然后,使用ImageView#setImageResource:
设置ImageViewImageView imagenow = (ImageView) findViewById(R.id.wordimage);
imagenow.setImageResource(imageid);
答案 1 :(得分:0)
首先,我要验证getResources().getIdentifier()
是否返回了正确的资源ID。将返回的内容与为R.java中的图像生成的资源ID进行比较。
如果资源ID正确,请尝试以下操作:
Bitmap bmpWord = BitmapFactory.decodeResource(getResources(), imageid);
imagenow.setImageBitmap(bmpWord);
如果资源ID不正确,那就是你的问题。