ResolveInfo getIconResource() 给出非常奇怪的结果(不正确的图标)

ResolveInfo getIconResource() giving really strange results (incorrect icons)

我正在创建 phone 上安装的应用程序列表。我正在使用 PackageManagerResolveInfo 检索所有已安装的应用程序。由于内存问题,我使用 getIconResource() 而不是 loadIcon()

我的问题是如何使用 iconResource int 在 imageView 中显示正确的图标?

编辑:添加代码

这是我创建一个列表的部分,其中已安装的应用程序存储在数组列表中 apps

private void loadApps(){
        manager = getPackageManager();
        apps = new ArrayList<AppDetail>();

        if(apps.size()==0) {
            Intent i = new Intent(Intent.ACTION_MAIN, null);
            i.addCategory(Intent.CATEGORY_LAUNCHER);
            List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0);
            for (ResolveInfo ri : availableActivities) {
                AppDetail app = new AppDetail();
                app.label = ri.loadLabel(manager);
                app.name = ri.activityInfo.packageName;
                app.icon = ri.activityInfo.getIconResource();
                app.allowed = false;
                apps.add(app);
            }
            Log.i("applist", apps.toString());
        }
    }

在 ArrayAdapter 中,我想将图标集放在 ImageView 中

ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
            int id = apps.get(position).icon;
            appIcon.setImageResource(id);

这是 phone 上的结果,它显示奇怪的图标(有些应用程序甚至使用 google 加上图标:

它还给出有关找不到资源的错误:

W/ResourceType﹕ getEntry failing because entryIndex 1 is beyond type entryCount 1 W/ResourceType﹕ Failure getting entry for 0x7f030001 (t=2 e=1) in package 0 (error -2147483647) W/ImageView﹕ Unable to find resource: 2130903041

问题是我从错误的地方检索图像。这是获得正确图标的代码:

ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
            String packageName = apps.get(position).name.toString();

            try {
                Drawable icon = getPackageManager().getApplicationIcon(packageName);
                appIcon.setImageDrawable(icon);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }