J'ai besoin de transmettre un ID de ressource à une méthode dans l'une de mes classes. Il doit utiliser à la fois l'identifiant vers lequel pointe la référence et la chaîne. Quelle est la meilleure façon d'y parvenir?
Par exemple:
R.drawable.icon
J'ai besoin d'obtenir l'ID entier de ceci, mais j'ai également besoin d'accéder à la chaîne "icon".
Il serait préférable que tout ce que je devais passer à la méthode soit la chaîne "icon".
Réponses:
@EboMike: Je ne savais pas que cela
Resources.getIdentifier()
existait.Dans mes projets, j'ai utilisé le code suivant pour ce faire:
Il serait utilisé comme ceci pour obtenir la valeur de
R.drawable.icon
la valeur entière de la ressourceJe viens de trouver un article de blog disant que
Resources.getIdentifier()
c'est plus lent que d'utiliser la réflexion comme je l'ai fait. Vérifiez-le .la source
getIdentifier()
doit faire deux recherches de réflexion. Dans votre exemple ci-dessus,getIdentifier()
utiliserait la réflexion pour obtenirDrawable.class
, puis une autre recherche de réflexion pour obtenir l'ID de ressource. Cela expliquerait la différence de vitesse. Cela étant dit, ni l'un ni l'autre ne sont particulièrement rapides et ont donc vraiment besoin d'être mis en cache (en particulier s'ils sont utilisés dans une boucle, ou pour les lignes en aListView
). Et le gros problème de l'approche de réflexion est qu'elle émet des hypothèses sur les composants internes d'Android qui pourraient changer dans certaines versions futures.context
paramètre?Vous pouvez utiliser cette fonction pour obtenir l'ID de ressource.
Donc, si vous voulez obtenir une fonction d'appel dessinable comme celle-ci
et pour la chaîne, vous pouvez l'appeler comme ça
Lis ça
la source
Ceci est basé sur la réponse @Macarse.
Utilisez-le pour obtenir l'ID des ressources d'une manière plus rapide et plus conviviale.
Exemple:
la source
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 dessinable Android par nom de ressource:
La méthode peut être modifiée pour accéder à d'autres types de ressources.
la source
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ return mContext.getDrawable(resourceId); } else { return mContext.getResources().getDrawable(resourceId); }
Si vous avez besoin de coupler une chaîne et un int, que diriez-vous d'une carte?
la source
Vous pouvez utiliser
Resources.getIdentifier()
, bien que vous deviez utiliser le format de votre chaîne tel que vous l'utilisez dans vos fichiers XML, c'est-à-direpackage:drawable/icon
.la source
getResourceEntryName(id)
pour rechercher le nom de la chaîne. Pas de problème pour trouver "icône" dans le texte plus long.J'ai fait comme ça, ça marche pour moi:
la source
la source
la source
getIdentifier
doit êtreid
. Cela n'a même pas été mentionné sur le site de développement Android. où avez-vous cette information?Puisque vous avez dit que vous ne vouliez passer qu'un seul paramètre et que peu importe lequel, vous pouvez passer l'identificateur de ressource, puis trouver le nom de la chaîne, ainsi:
Cela pourrait être le moyen le plus efficace d'obtenir les deux valeurs. Vous n'avez pas à vous soucier de trouver uniquement la partie "icône" d'une chaîne plus longue.
la source
Dans votre res / layout / my_image_layout.xml
Pour saisir cette ImageView par sa valeur @ + id, dans votre code java, procédez comme suit:
la source
L'approche Kotlin
Usage:
la source
Dans MonoDroid / Xamarin.Android, vous pouvez faire:
Mais depuis GetIdentifier, ce n'est pas recommandé dans Android - vous pouvez utiliser Reflection comme ceci:
où je suggère de mettre un essai / attraper ou de vérifier les cordes que vous passez.
la source
Pour obtenir l'identifiant Drawable à partir du nom de la ressource String, j'utilise ce code:
la source