Skip to content Skip to sidebar Skip to footer

How To Convert String To Its Resource Id (android Studio)

I have an xml string in my values/strings.xml file 150 And I have the String '150' in my controller MainActivity.java. In my Main

Solution 1:

You can not get identifier by value, but you can make your identifier name look like a value and get it by string name,

So what I suggest,

use your String resource name something like, resource_150

<string name="resource_150">150</string>

Now here resource_ is common for your string entries in string.xml file, so in your code,

Stringvalue="150";
intresourceId=this.getResources().
             getIdentifier("resource_"+value, "string", this.getPackageName());

Now resourceId value is as equivalent to R.string.resource_150

Just make sure here this represent your application context. In your case MainActivity.this will work.

Solution 2:

I have found some tips here: Android, getting resource ID from string?

Below an example how to get strings and their values defined in strings.xml. The only thing you have to do is making a loop and test which string is holding your value. If you need to repeat this many times it might be better to build an array. //---------

String strField = "";
    int resourceId = -1;
    String sClassName = getPackageName() + ".R$string";
    try {
        Class classToInvestigate = Class.forName(sClassName); 

        Field fields[] = classToInvestigate.getDeclaredFields();

        strField = fields[0].getName();     
        resourceId = getResourceId(strField,"string",getPackageName());

        String test = getResources().getString(resourceId);

        Toast.makeText(this,
                       "Field: " + strField + " value: " + test ,
                       Toast.LENGTH_SHORT).show();


    } catch (ClassNotFoundException e) {
            Toast.makeText(this,
                       "Class not found" ,
                       Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(this,
                       "Error: " + e.getMessage() ,
                       Toast.LENGTH_SHORT).show();
    }


}
public int getResourceId(String pVariableName, String pResourcename, String pPackageName) 
{
    try {
        returngetResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}   

Solution 3:

EDIT

You can't search for a resource Id by the string value. You could make your own Map of the values and resourceIds and use that as a look up table, but I believe just choosing an intelligent naming convention like in the accepted answer is the best solution.

Solution 4:

In addition to user370305, you could make an extension and use it the same was as with int ids.

import android.app.Activity

fun Activity.getString(id: String): String {
    val resourceId = this.resources.getIdentifier(id, "string", this.packageName)
    return getString(resourceId)
}

Post a Comment for "How To Convert String To Its Resource Id (android Studio)"