178 votes

Android, obtenir l’ID de ressource de chaîne ?

J’ai besoin passer un ID de ressource à une méthode dans une de mes classes. Il faut utiliser l’id de la référence pointant vers et aussi il a besoin de la chaîne. Comment dois-je mieux y parvenir ?

Par exemple :

J’ai besoin d’obtenir l’ID entier de cela, mais j’ai aussi besoin d’accéder à la chaîne « icône ».

Il serait préférable si tout ce que je devais passer à la méthode est la chaîne « icône ».

196voto

Macarse Points 36519

@EboMike : je ne savais pas que `` a existé.

Dans mes projets, j’ai utilisé le code suivant pour faire cela :

Elle serait utilisée comme ceci :

Je viens de trouver un billet de blog disant que `` est plus lent qu’à l’aide de la réflexion comme je le faisais. Check it out.

97voto

Azhar Points 6800

Vous pouvez utiliser cette fonction pour obtenir l’ID de ressource.

Donc, si vous souhaitez obtenir pour drawable appeler la fonction comme ceci

et pour la chaîne, on peut appeler ça comme ça

Lisez ceci

41voto

Daniel De León Points 2842

Ceci est basé sur la réponse @Macarse.

Utilisez-le pour obtenir l'identifiant de ressources plus rapidement et plus facilement.

 public static int getId(String resourceName, Class<?> c) {
    try {
        Field idField = c.getDeclaredField(resourceName);
        return idField.getInt(idField);
    } catch (Exception e) {
        throw new RuntimeException("No resource ID found for: "
                + variableName + " / " + c, e);
    }
}
 

Exemple:

 getId("icon", R.drawable.class);
 

29voto

Martin Pearman Points 399

Comment obtenir un identifiant de ressource d' application à partir du nom de la ressource est une question assez courante et bien répondue.

Comment obtenir un identifiant de ressource Android natif à partir du nom de la ressource est moins bien répondu. Voici ma solution pour obtenir une ressource extractible sur Android par nom de ressource:

 static public Drawable getAndroidDrawable(String pDrawableName){
    int resourceId=Resources.getSystem().getIdentifier(pDrawableName, "drawable", "android");
    if(resourceId==0){
        return null;
    } else {
        return Resources.getSystem().getDrawable(resourceId);
    }
}
 

La méthode peut être modifiée pour accéder à d'autres types de ressources.

8voto

EboMike Points 39257

Vous pouvez utiliser Resources.getIdentifier() , bien que vous deviez utiliser le format de votre chaîne comme vous l’utilisez dans vos fichiers XML, c’est-à-dire package:drawable/icon .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X