Dans mon application, je dois obtenir des dessins bitmap quelque part où je ne veux pas conserver la référence R
. Je crée donc une classe DrawableManager
pour gérer les dessinables.
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.?
}
}
Ensuite, je veux obtenir le nom dessinable quelque part comme ceci (le fichier car.png est placé dans les ressources res/drawables):
Drawable d= DrawableManager.getDrawable("car.png");
Cependant, comme vous pouvez le constater, je ne peux pas accéder aux ressources par le nom suivant:
public static Drawable getDrawable(String name) {
return R.drawable.?
}
Des alternatives?
Notez que votre approche est presque toujours la mauvaise façon de faire les choses (il est préférable de passer le contexte à l'objet lui-même qui utilise l'élément dessinable plutôt que de conserver un Context
statique quelque part).
Etant donné que si vous voulez effectuer un chargement dynamique, vous pouvez utiliser getIdentifier :
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
return resources.getDrawable(resourceId);
Vous pourriez faire quelque chose comme ceci.-
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);
}
Pour accéder au contexte de n’importe où, vous pouvez étendre la classe d’application.
public class YourApplication extends Application {
private static YourApplication instance;
public YourApplication() {
instance = this;
}
public static Context getContext() {
return instance;
}
}
Et mappez-le dans votre balise Manifest
application
<application
Android:name=".YourApplication"
....
Modifier le contenu de l'image:
ImageView image = (ImageView)view.findViewById(R.id.imagenElement);
int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName());
image.setImageResource(resourceImage);