Comment accéder à la ressource avec un nom dynamique dans mon cas?
Si j'obtiens le nom de l'image en tant que variable comme suit:
var imageName = SERVICE.getImg();
Ensuite, comment puis-je obtenir la ressource avec R.drawable.????
, j'ai essayé R.drawable[imageName]
, mais cela a échoué. Toutes les suggestions?
5 réponses
int id = getResources().getIdentifier(imageName, type, package);
Cela vous donnera L'ID de la ressource que vous recherchez. avec elle, vous pouvez ensuite accéder à la ressource à partir de la classe R.
En Utilisant seulement les name
paramètre:
Vous pouvez également inclure toutes les 3 informations dans le paramètre " nom " en utilisant le format suivant: "package:type/image_name"
, quelque chose comme:
int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
Ceci est utile lorsque vous travaillez avec des composants externes ou des bibliothèques que vous ne pouvez pas, ou ne voulez pas, changer la façon dont getIdentifier()
est appelé. par exemple: PSBA Lanceur3
Essayez ceci:
int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
Vous avez besoin de réflexion.
Supposons que vous ayez R. drawable.image1, si vous voulez y accéder via le nom de chaîne "image1", suivant devrait fonctionner:
String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
Mais remarquez qu'il n'obtient que L'Id de l'image, vous avez toujours besoin du gonfleur pour obtenir le tirage réel de celui-ci.
Utilisez cette fonction
public static String getResourceString(String name, Context context) {
int nameResourceID = context.getResources().getIdentifier(name,
"string", context.getApplicationInfo().packageName);
if (nameResourceID == 0) {
throw new IllegalArgumentException(
"No resource string found with name " + name);
} else {
return context.getString(nameResourceID);
}
}
Vous pouvez utiliser getIdentifier méthode qui vous donnera l'id de ressource par son nom. Vérifiez ce fil pour plus de détails.