2015-12-27 25 views
5

voglio convertire Drawable in int e allora vice versa.Basically voglio salvare Arraylist oggetto in sharedPrefrence. A tale scopo ho implementato il metodo di conversione Srtring Gson. Se utilizzo qui Drawable anziché int, la conversione di Gson String richiede molto tempo. quindi voglio usare int anziché Drawable.Come convertire Drawable in int e viceversa in Android

private List<AppInfo> apps = null; 

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

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

Dove AppInfo qui è

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; 
} 

Ecco fonte di conversione ArrayList di oggetti personalizzati in String modo che io possa salvarlo SharedPrefrence.

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

Avete tutte le icone nelle vostre risorse? O li stai scaricando dal server? –

+0

E come si compila le app Elenco ? –

+0

La prima volta che lo popolo da res/drawable, dopo questo se qualcuno (utente) desidera cambiare quell'icona con qualcuno nell'icona di sistema, allora ho bisogno di ottenere l'icona dell'applicazione di installazione del sistema. In breve, un po 'di tempo ho bisogno di ottenere da res/drawable e alcune volte ho bisogno di ottenere icone dall'icona dell'applicazione di installazione dal sistema, da questo mContext.getPackageManager(). GetApplicationIcon (apps.get (posizione) .getPname()) –

risposta

3

Int -> Drawable:

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

Drawable -> Int:

(presumo, che si sta popolando List<AppInfo> apps con app di cui icone sono già nella cartella res/drawable della tua app)

Una volta impostato il tuo R.drawable.app1 a ImageView, si può anche dare un tag per identificare la risorsa nel ImageView tardi:

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()); 

Se le icone sono provenienti da server di - l'unico modo è to store them to disk e poi ri- caricali. (O, meglio, fare affidamento sulle soluzioni image-caching già esistenti come picasso)

UPD: Non c'è modo diretto di conversione Drawable in int, ma in questo caso particolare, è possibile ottenere il int, invece di Drawable da PackageManager:

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

C'è un problema che sto affrontando è id risorsa non trovato eccezione mentre ApplicationInfo applicationInfo = mContext.getPackageManager(). getApplicationInfo (apps.get (posizione) .getPname(), 1); icona int = applicationInfo.icon; apps.get (position) .setIcon (applicationInfo.icon); // mentre torna indietro int-> Drawable 'Drawable icon = getResources(). getDrawable (apps.get (i) .getIcon()); ImageView imageView = (ImageView) rootView.findViewById (imageArray [i]); imageView.setImageDrawable (icona); ' –

0

questo modo siamo in grado di prendere icona dell'applicazione e impostarlo per un ImageView.

    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)); 

        }