it-swarm.com.de

Wie Drawable in int und umgekehrt in Android konvertieren

Ich möchte Drawable in int und umgekehrt konvertieren. Grundsätzlich möchte ich Arraylist object in sharedPrefrence speichern. Zu diesem Zweck habe ich Implement Gson zu Srtring-Konvertierungsmethode. Wenn ich hier Drawable anstelle von int verwende, nimmt die Konvertierung von Gson-Strings viel Zeit in Anspruch. Ich möchte also int anstelle von Drawable verwenden.

 private List<AppInfo> apps = null;

   public void setIcon(int icon) {
    this.icon = icon;
}

   apps.get(position).setIcon(mContext.getResources().getDrawable(apps.get(position).getIcon()));

Wo AppInfo hier ist

    public AppInfo(String appname, String pname, String versionName, int versionCode, int icon, int color) {
    this.appname = appname;
    this.pname = pname;
    this.versionName = versionName;
    this.versionCode = versionCode;
    this.icon = icon;
    this.color = color;
}

Hier ist die Quelle für das Konvertieren von ArrayList des benutzerdefinierten Objekts in String, damit ich es in SharedPrefrence speichern kann.

            Gson gson = new Gson();
            apps.get(number).setColor(picker.getColor());
            String JsonAppsdata = gson.toJson(apps);
            System.out.println("Storing="+JsonAppsdata);
            utility.StoreData(getApplicationContext(), JsonAppsdata);
6
M.ArslanKhan

Int -> Drawable:

Drawable icon = getResources().getDrawable(42, getTheme());

Drawable -> Int:

(Ich gehe davon aus, dass Sie List<AppInfo> apps mit Apps füllen, deren Symbole sich bereits im Ordner res/drawable Ihrer App befinden.)

Sobald Sie Ihren R.drawable.app1 auf ImageView gesetzt haben, können Sie ihm auch eine tag zuweisen, um die Ressource in der ImageView später zu identifizieren:

    ImageView appIcon1ImageView = (ImageView)findViewById(R.id.app_icon_1);
    appIcon1ImageView.setImageDrawable(getDrawable(R.drawable.app1));
    appIcon1ImageView.setTag(R.drawable.app1);

    ......
    // Once you need to identify which resource is in ImageView
    int drawableId = Integer.parseInt(appIcon1ImageView.getTag().toString());

Wenn Ihre Symbole vom Server stammen, besteht die einzige Möglichkeit darin, sie auf der Festplatte zu speichern und sie dann erneut zu laden. (oder, besser, verlassen Sie sich auf die bereits vorhandenen Bild-Caching-Lösungen wie picasso )

UPD: Es gibt keine direkte Möglichkeit, Drawable in int zu konvertieren. In diesem speziellen Fall ist es jedoch möglich, die int anstelle der Drawable aus PackageManager zu erhalten:

ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(apps.get(position).getPname(),1);
int icon= applicationInfo.icon;
4

Auf diese Weise können wir das App-Symbol abrufen und für eine Bildansicht festlegen.

                   applicationInfo=mContext.getPackageManager().getApplicationInfo(apps.get(position).getPname(),PackageManager.GET_META_DATA);
                   int icon= applicationInfo.icon;
                   Rsources resources=mContext.getPackageManager().getResourcesForApplication(applicationInfo);

                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                        holder.itemIcon.setImageDrawable(resources.getDrawable(icon,null));
                    }else
                    {
                         holder.itemIcon.setImageDrawable(resources.getDrawable(icon));

                    }
0
Lins Louis