Maison >Java >javaDidacticiel >Comment obtenir efficacement un ID de ressource Android à partir de son nom de chaîne ?

Comment obtenir efficacement un ID de ressource Android à partir de son nom de chaîne ?

DDD
DDDoriginal
2024-12-20 09:31:09607parcourir

How to Efficiently Get an Android Resource ID from its String Name?

Obtention de l'ID de ressource à partir d'une chaîne dans Android

Lorsque vous transmettez un ID de ressource à une méthode, il est souvent souhaitable d'accéder à la fois à l'ID et à la chaîne correspondante. Par exemple, considérons la ressource « icône » :

R.drawable.icon

Pour obtenir à la fois l'ID et la chaîne « icône », plusieurs approches peuvent être explorées :

Une solution consiste à utiliser les ressources. Méthode getIdentifier() :

int resID = getResources().getIdentifier("icon", "drawable", getPackageName());
String iconString = "icon";

Cependant, des recherches récentes ont indiqué que Resources.getIdentifier() peut être moins efficace que d'utiliser réflexion.

Vous pouvez également utiliser le code basé sur la réflexion suivant :

public static int getResId(String resName, Class<?> c) {

    try {
        Field idField = c.getDeclaredField(resName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

Pour utiliser cette méthode pour la ressource « icône » :

int resID = getResId("icon", R.drawable.class); // or other resource class
String iconString = "icon";

Bien que cette approche de réflexion peut être plus efficace, il est important de noter les inconvénients potentiels. Dans une version avec la réduction du code/des ressources activée, cette solution peut échouer. De plus, cela peut ne pas fonctionner dans les cas où le nom de la chaîne diffère du format de nom de ressource attendu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn