如何使用保存在数据库中的资源ID在imageview中加载图像

时间:2014-06-09 11:44:28

标签: android android-layout android-imageview android-resources

我在列表中添加了资源ID。并使用该resourceid在ImageView中加载图像。但它显示黑色。我这样做了。提前谢谢。

private void initArcMenu(ArcMenu menu, int[] itemDrawables, final ArrayList<AppInfo> appinfo) {
        final int itemCount = appinfo.size();

        for (int i = 0; i < itemCount; i++) {

            long drawable =  appinfo.get(i).getIconResourceId();
            appinfo.get(0).getIconResourceId();
            ImageView item = new ImageView(this);
           // item.setImageResource((int) drawable);
            item.setImageBitmap(BitmapFactory.decodeResource(getResources(),(int)appinfo.get(i).getIconResourceId()));
            Log.e("Simple drawable",(int) drawable+"");
            final int position = i;
            menu.addItem(item, new View.OnClickListener() {

                @Override
                public void onClick(View v) {


                    Toast.makeText(RingActivity.this, "position:" + appinfo.get(position).getAppName(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

3 个答案:

答案 0 :(得分:1)

使用item.setImageResource((int)appinfo.get(i).getIconResourceId());

答案 1 :(得分:0)

您可以使用此

item.setImageDrawable(RingActivity.this.getResources().getDrawable((int)appinfo.get(i).getIconResourceId()));

答案 2 :(得分:0)

我认为您的问题是由于您获得了其他应用的资源ID,但您尝试从自己应用的资源中加载与这些ID相对应的资源。

罪魁祸首就是这条线:

item.setImageBitmap(BitmapFactory.decodeResource(getResources(),(int)appinfo.get(i).getIconResourceId()));

具体来说,getResources致电。这会尝试使用您自己的应用资源来加载您找到的图标。相反,您需要使用应用程序的资源,您正在处理其信息。您还可以简化其余部分并使用setResourceDrawable代替。

我假设AppInfo是您自己的类,其中包含有关某些应用的信息。它应该包含相应应用程序的包名称。然后你的代码看起来像这样:

String pkg = appinfo.get(i).getPackageName();
Resources res = getPackageManager().getResourcesForApplication(pkg);
item.setIconDrawable(res.getDrawable((int)appinfo.get(i).getResourceIcon());

如果您不在Context的后代(即不在活动或类似内容中),则需要在getPackageManager()的实例上调用Context