7

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

3 Answers 3

13

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

int resID = getResources().getIdentifier("pic" + position + "info", "string", getPackageName());
String strTest = getResources().getString(resID);
Sign up to request clarification or add additional context in comments.

1 Comment

This answer is much slower, as it will require the use of reflection in Java. Be very careful using this method in production code.
2

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]);  

Comments

2

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>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.