Drawableをintに、またはその逆に変換したい。基本的に、ArraylistオブジェクトをsharedPrefrenceに保存したい。その目的のために、私は実装GsonからSrtringへの変換方法を持っています。ここでintの代わりにDrawableを使用すると、Gson文字列の変換にかなりの時間がかかります。そのため、Drawableの代わりにintを使用したいと思います。
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をStringに変換して、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);
Int->ドローアブル:
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());
アイコンがサーバーからのものである場合-唯一の方法は アイコンをディスクに保存する そしてそれらを再ロードすることです。 (または、より良いのは、 picasso のような既存の画像キャッシュソリューションに依存することです)
UPD:Drawable
をint
に変換する直接的な方法はありませんが、この特定のケースでは、 int
のDrawable
の代わりにPackageManager
:
ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(apps.get(position).getPname(),1);
int icon= applicationInfo.icon;
これは、アプリアイコンを取得して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));
}