2015-12-27 3 views
5

Я хочу, чтобы преобразовать Drawable в Int, а затем вице-versa.Basically Я хочу, чтобы сохранить Список_массивы объекта в sharedPrefrence. Для этой цели я внедрил Gson в метод преобразования Srtring. Если я использую здесь Drawable вместо int, то конверсия Gons String занимает много времени. поэтому я хочу использовать int вместо Drawable.Как конвертировать вытяжку в междунар и наоборот в 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())); 

Где AppInfo здесь

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

Вот источник Преобразование ArrayList пользовательских объектов в строки, так что я могу сохранить его в 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

У вас есть все иконки в ваших ресурсах? Или вы загружаете их с сервера? –

+0

А как вы заполняете список приложений? –

+0

В первый раз я заполняю его из res/drawable, после чего, если кто-то (пользователь) хочет изменить этот значок с каким-то в значке системного приложения, тогда мне нужно получить значок приложения для установки системы. Короче говоря, некоторое время мне нужно получить от res/drawable, а иногда мне нужно получить значки от иконки приложения приложения из системы, с помощью этого mContext.getPackageManager(). GetApplicationIcon (apps.get (position) .getPname()) –

ответ

3

Int -> Drawable:

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

Drawable -> Int:

(я предполагаю, что вы заселение List<AppInfo> apps с приложением, чьи иконки уже в папке res/drawable вашего приложения)

После того, как вы установите R.drawable.app1 в ImageView, вы можете дать ему tag для идентификации ресурса в ImageView позже:

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

Если ваши иконки приходят от сервера - единственный путь to store them to disk, а затем повторно загрузите их. (Или, лучше полагаться на уже существующие изображения кэширования решений, такие как picasso)

UPD: Там нет прямого способа преобразования Drawable в int, но в данном конкретном случае, можно получить int, вместо из Drawable от PackageManager:

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

Существует проблема, с которой я столкнулся - это идентификатор ресурса, который не найден, а ApplicationInfo applicationInfo = mContext.getPackageManager(). getApplicationInfo (apps.get (положение) .getPname(), 1); int icon = applicationInfo.icon; apps.get (position) .setIcon (applicationInfo.icon); // при возврате int-> Drawable 'Drawable icon = getResources(). getDrawable (apps.get (i) .getIcon()); ImageView imageView = (ImageView) rootView.findViewById (imageArray [i]); imageView.setImageDrawable (значок); ' –

0

Это, как мы можем извлечь значок приложения и установить его для 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)); 

        } 
Смежные вопросы