Maison >Java >javaDidacticiel >Comment récupérer un identifiant de ressource Android et sa chaîne correspondante ?

Comment récupérer un identifiant de ressource Android et sa chaîne correspondante ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-22 07:45:42947parcourir

How to Retrieve an Android Resource ID and its Corresponding String?

Android : Récupération de l'ID de ressource à partir d'une chaîne

Problème

Vous devez transmettre un ID de ressource à une méthode, mais vous souhaitez également accéder au ressource de chaîne correspondante. Par exemple, vous avez R.drawable.icon et vous voulez à la fois l'ID entier et la chaîne "icon".

Solution

Utilisation de Resources.getIdentifier()

Une solution consiste à utiliser la méthode getIdentifier() dans la classe Resources. Cette méthode prend le nom de la ressource chaîne et le type de ressource (par exemple, dessinable) comme arguments et renvoie l'ID entier associé.

// Get the integer ID for the icon
int id = resources.getIdentifier("icon", "drawable", getPackageName());

// Retrieve the string resource
String stringResource = resources.getString(id);

Utilisation de Reflection

Une autre option consiste à utiliser la réflexion pour accéder directement au champ ID de ressource. Notez que cette solution peut ne pas fonctionner dans les versions avec la réduction du code/des ressources activée.

// Get the R.drawable class
Class<?> clazz = R.drawable.class;

// Get the field for the icon resource
Field idField = clazz.getDeclaredField("icon");

// Get the integer ID
int id = idField.getInt(null);

// Retrieve the string resource
String stringResource = resources.getString(id);

Combiner les deux approches

Pour une flexibilité maximale, vous pouvez combiner les deux approches . Transmettez le nom de la ressource chaîne à la méthode et utilisez la technique préférée (réflexion ou getIdentifier()) dans la méthode pour récupérer l'ID et la chaîne.

// Method that accepts the string resource name
public void processResource(String resourceName) {
  // Get the R.drawable class
  Class<?> clazz = R.drawable.class;

  try {
    // Try using reflection to get the ID
    Field idField = clazz.getDeclaredField(resourceName);
    int id = idField.getInt(null);

    // Retrieve the string resource
    String stringResource = resources.getString(id);
  } catch (Exception e) {
    // Fallback to using getIdentifier()
    int id = resources.getIdentifier(resourceName, "drawable", getPackageName());
    String stringResource = resources.getString(id);
  }

  // Use the ID and string as needed in your method
  ...
}

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