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?

33
demandé sur Leem 2011-07-05 17:57:59

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

47
répondu nicholas.hauschild 2017-08-10 14:20:52

Essayez ceci:

int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
21
répondu Dark Magic 2014-02-13 07:57:53

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.

11
répondu xandy 2011-07-05 14:02:51

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);
    }
}
3
répondu clydealmighty 2013-07-10 13:56:27

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.

0
répondu Mojo Risin 2011-07-05 14:03:34