我有一个用android编写的小应用程序。
从SQLite数据库中,我提取了一些类别和图标名称,如(酒店,公寓等)。我在drawable
文件夹中的所有图像示例。
现在我试图读取这些图像并将它们显示在列表中,但我有可绘制路径的问题。错误总是:open failed: ENOENT (No such file or directory)
。
以下是代码示例:
@Override
public View getView(int position, View view, ViewGroup parent)
{
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.category_list_item, null, true);
Uri otherPath = Uri.parse("android.resource://"+getContext().getPackageName()+"/drawable/");
String drawable_path = otherPath.toString();
Toast.makeText(getContext(), drawable_path, Toast.LENGTH_LONG).show();
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
TextView categoryID = (TextView) rowView.findViewById(R.id.category_id);
txtTitle.setText(items.get(position));
imageView.setImageDrawable(Drawable.createFromPath(drawable_path+imageIds.get(position)+"\""));
categoryID.setText(category_ids.get(position));
return rowView;
}
答案 0 :(得分:1)
我真的不建议您以这种方式访问您的drawables。使用的ID不稳定,任何新版本都可能破坏链接。如果你必须通过外部数据库引用它们,我要么将drawables写入文件系统并将它们作为普通文件引用,或者我将可绘制的名称存储在db中并通过查找获取id ,然后通过该ID引用它。
答案 1 :(得分:0)
@Gabe Sechan 给了我一个好主意,所以我解决了这个问题。如果有人有同样的问题,这里是答案。
将名称存储在数据库中,然后将其转换为int
,以便设置图像资源。这是代码:
int resID = getContext().getResources().getIdentifier(imageIds.get(position),
"drawable", getContext().getPackageName());
imageView.setImageResource(resID);
希望这会对某人有所帮助。因为我的项目工作得很好。