私のアプリケーションでは、参照R
を保持したくない場所にビットマップドロウアブルを取得する必要があります。そこで、ドローアブルを管理するクラスDrawableManager
を作成します。
public class DrawableManager {
private static Context context = null;
public static void init(Context c) {
context = c;
}
public static Drawable getDrawable(String name) {
return R.drawable.?
}
}
次に、このような名前でドロアブルを取得します(car.pngはres/drawables内に配置されます):
Drawable d= DrawableManager.getDrawable("car.png");
ただし、ご覧のとおり、名前でリソースにアクセスすることはできません。
public static Drawable getDrawable(String name) {
return R.drawable.?
}
代替案はありますか?
あなたのアプローチは、ほとんど常に物事を行う間違った方法であることに注意してください(静的Context
をどこかに保持するよりも、ドロウアブルを使用しているオブジェクト自体にコンテキストを渡す方が良いです)。
したがって、動的な描画可能ロードを実行する場合は、 getIdentifier を使用できます。
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
return resources.getDrawable(resourceId);
このようなことができます。
public static Drawable getDrawable(String name) {
Context context = YourApplication.getContext();
int resourceId = context.getResources().getIdentifier(name, "drawable", YourApplication.getContext().getPackageName());
return context.getResources().getDrawable(resourceId);
}
どこからでもコンテキストにアクセスするために、Applicationクラスを拡張できます。
public class YourApplication extends Application {
private static YourApplication instance;
public YourApplication() {
instance = this;
}
public static Context getContext() {
return instance;
}
}
Manifest
application
タグにマップします
<application
Android:name=".YourApplication"
....
画像コンテンツの変更:
ImageView image = (ImageView)view.findViewById(R.id.imagenElement);
int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName());
image.setImageResource(resourceImage);