我在列表中添加了资源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();
}
});
}
}
答案 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
。