1

我有一个 RecyclerView 可以获取用户安装的应用程序,其中包括它的图标。我想通过它的 URI 将应用程序的可绘制图标加载到 ImageView。直接使用加载可绘制对象setImageDrawable() 会导致 UI 线程出现问题。使用 Image Loader 延迟加载它Glide是我解决此类问题的选择。

尝试过的解决方案:https ://stackoverflow.com/a/21993055/13196984 我使用了那个答案,但它没有加载所有图标。这是我的代码片段和手机的快照。

代码:

我如何获取应用程序信息

PackageManager pm = context.getPackageManager();
        List<ApplicationInfo> apps = pm.getInstalledApplications(0);
        ArrayList<InstalledApp> installedApps = new ArrayList<>();

        for (ApplicationInfo app : apps) {
            if (pm.getLaunchIntentForPackage(app.packageName) != null) {
                String appName = String.valueOf(app.loadLabel(pm));
                int icon = app.icon;
                String packageName = app.packageName;
                installedApps.add(new InstalledApp(appName, icon, packageName));

            }

        }

InstalledApp是我创建的自定义对象,但我仍然会包含它。

    public InstalledApp(String appName, int appIcon,String packageName) {
        this.appName = appName;
        this.appIcon = appIcon;
        this.packageName = packageName;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public int getAppIcon() {
        return appIcon;
    }

    public void setAppIcon(int appIcon) {
        this.appIcon = appIcon;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }
}

这是我从InstalledApp对象加载图像的方式

 if(app.getAppIcon() != 0) {
            Uri uri = Uri.parse("android.resource://" + app.getPackageName() + "/" + app.getAppIcon());
            Glide.with(activity).load(uri).into(holder.appIconIV);
        }

RecyclerView 的屏幕截图

希望您能够帮助我。:)

4

0 回答 0