How To Convert String To Its Resource Id (android Studio)
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)"