deshg
deshg

Reputation: 1253

How to access a string using a dynamic string name in android (similar to eval in javascript)?

I'm trying to access string variables using dynamic names depending on what position my gallery is at. To get the value of a string using a fixed name I use the following which is fine (the string is called pic1info):

String strTest = getResources().getString(R.string.pic1info);  

My strings are named pic1info, pic2info, pic3info etc and I want to replace the static definition of pic1info to include the position so pass the contents of the following string in place of pic1info above so that it returns a different string depending on the current position:

String strDynamicStringName= "pic" + position + "info";

In javascript the equivalent would be eval, i'm sure there's a simple way to do this but i can't work out how!

Thanks so much for your help as ever!

Dave

Upvotes: 7

Views: 4537

Answers (3)

Tyler
Tyler

Reputation: 22136

Inspired by Kaj's answer, you can also put a String array in your XML file:

<resources>
    <string-array name="picInfos">
        <item>value of pic1info goes here</item>
        <item>value of pic2info goes here</item>
        <item>value of pic3info goes here</item>
    </string-array>
</resources>

Upvotes: 2

Kristin
Kristin

Reputation: 241

use this: android.content.res.Resources.getIdentifier

int resID = getResources().getIdentifier("pic" + position + "info", "string", getPackageName());
String strTest = getResources().getString(resID);

Upvotes: 13

Kaj
Kaj

Reputation: 10959

No, there's no simple way to do that in Java, but you can create an array of ints, where each index represents the R-value of that string.

private static final int[] LOOKUP_TABLE = new int[] {
   R.string.pic1info,
   R.string.pic2info,
   R.string.pic3info,
   R.string.pic4info
};

Getting a string would then become:

String strTest = getResources().getString(LOOKUP_TABLE[position]);  

Upvotes: 2

Related Questions