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".
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);
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);
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 ... }
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!