Home > Java > javaTutorial > How to Retrieve an Android Resource ID and its Corresponding String?

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

Barbara Streisand
Release: 2024-12-22 07:45:42
Original
884 people have browsed it

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

Android: Retrieving Resource ID from String

Problem

You need to pass a resource ID to a method, but you also want access to the corresponding string resource. For instance, you have R.drawable.icon, and you want both the integer ID and the string "icon".

Solution

Using Resources.getIdentifier()

One solution is to use the getIdentifier() method in the Resources class. This method takes the string resource name and the resource type (e.g., drawable) as arguments and returns the associated integer ID.

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

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

Using Reflection

Another option is to use reflection to access the resource ID field directly. Note that this solution may not work in release builds with code/resource shrinking enabled.

// 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);
Copy after login

Combining Both Approaches

For maximum flexibility, you can combine both approaches. Pass the string resource name to the method and use the preferred technique (reflection or getIdentifier()) within the method to retrieve the ID and string.

// 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
  ...
}
Copy after login

The above is the detailed content of How to Retrieve an Android Resource ID and its Corresponding String?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template