Selzier
Selzier

Reputation: 101

Android: Reference R.string.blah based on a method input

I have 3 strings in my strings.xml.

<string name="string1">Hello from string1</string>
<string name="string2">Hello from string2</string>
<string name="string3">Hello from string3</string>

Now, I have a method that I pass a string like "string1" or "string2":

void showStringToast(String sName) {
    Toast.makeText(this, getString(R.string.[sName]), Toast.LENGTH_LONG).show();
}

How do I properly reference R.string.sName when sName is being passed as a parameter?

Upvotes: 0

Views: 720

Answers (5)

Hareshkumar Chhelana
Hareshkumar Chhelana

Reputation: 24848

// try this
void showStringToast(String sName) {
        Toast.makeText(this, getString(getResources().getIdentifier(sName, "string", getPackageName())), Toast.LENGTH_LONG).show();
    }

Upvotes: 2

KDeogharkar
KDeogharkar

Reputation: 10959

you can pass parameter to your string using like:

<string name="string1">Hello from %1$s (or $d if you want to pass integer) %2$d (second parameter)</string>

Now pass parameter from getstring method:

getString(R.string.string1,first parameter ,second parameter ...);enter image description here

see this

Upvotes: 2

user1376112
user1376112

Reputation:

I haven't tried this code but I believe you could make use of HashMaps instead.

Declare a static HashMap somewhere, let's say in Constants.java

public static HashMap<String, String> map = new HashMap<String, String>();

then initialize your map. This must be inside a method or constructor

map.put("string1", "Hello from string1");
map.put("string2", "Hello from string2");
map.put("string3", "Hello from string3");

Now you can find your String with something like:

Toast.makeText(this, Constants.map.get(sName).toString(), Toast.LENGTH_LONG).show();

Don't forget to import Constants.java

Upvotes: 1

Shivang Trivedi
Shivang Trivedi

Reputation: 2182

Try This way:

  void showStringToast(int sName) {
Toast.makeText(this, getString(sName), Toast.LENGTH_LONG).show();
 } 

Upvotes: 0

ayon
ayon

Reputation: 2180

R.string.something is an integer value that contains a reference to your string. So , R.string.something is like a variable here. Have you ever done such thing that you have generated a variable by appending some string to make it like a variable name and your generated variable name working like a variable ? :)

Instead you can do like this. In your java source file , take your required string values to a String array from your resources. Then use them when necessary. Hope it helps.

Upvotes: 0

Related Questions