web-dev-qa-db-fra.com

Comment accéder à la ressource avec un nom dynamique dans mon cas?

Si j'obtiens le nom de l'image sous forme de variable comme suit:

var imageName = SERVICE.getImg();

Ensuite, comment puis-je obtenir la ressource avec R.drawable.????, J'ai essayé R.drawable[imageName], mais il a échoué. Aucune suggestion?

39
Leem
int id = getResources().getIdentifier(imageName, type, package);

Cela vous donnera l'ID de la ressource que vous recherchez. Avec lui, vous pouvez alors accéder à la ressource à partir de la classe R.

En utilisant uniquement le paramètre name:

Vous pouvez également inclure 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, modifier la façon dont getIdentifier() est appelée. par exemple: AOSP Launcher

52
nicholas.hauschild

Essaye ça:

int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
28
Dark Magic

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", ce qui suit devrait fonctionner:

String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);

Mais notez qu'il n'obtient que l'identifiant de l'image, vous avez toujours besoin du gonfleur pour en tirer le dessin réel.

12
xandy

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
clydealmighty

Vous pouvez utiliser la méthode getIdentifier qui vous donnera l'ID de ressource par son nom. Vérifiez ce fil pour plus de détails.

0
Mojo Risin