Reputation: 311
I have a string array defined in arrays.xml that references two strings in strings.xml:
<string-array name="my_options">
<item>@string/my_string_one</item>
<item>@string/my_string_two</item>
</string-array>
<string name="my_string_one">Value 1</string>
<string name="my_string_two">Value 2</string>
I need to get the position of an item in the array, based on the value of the string. I.e string "Value 2" has an index of 1. I can obviously just hard code the positional values (0, 1, etc.), but it will break if the order of the strings is changed. I want the code to be positionally independent. The following works:
int value = Arrays.asList((getResources().getStringArray(R.array.my_options))).indexOf(getString(R.string.my_string_one));
Is there a more compact, simpler way to do this?
Upvotes: 7
Views: 8775
Reputation: 12596
The code you show in your question is basically what you need to do.
However, you could refactor it somewhat to make it more readable: Refactor Arrays.asList((getResources().getStringArray(R.array.my_options))) into a List (i don't know how your app's code looks like, but you may be able to store this List as a instance field or even as a static (class) field).
static List<String> myOptions;
....
if (myOptions == null) {
myOptions = Arrays.asList((getResources().getStringArray(R.array.my_options)));
}
...
int value = myOptions.indexOf(getString(R.string.my_string_one));
Upvotes: 11
Reputation: 3718
Maybe a HashSet might help you or something like that, where you put your name of your string as the key and the value as the value. Then you can select the value with the name of the key.
Upvotes: 0