我在arrays.xml中定义了一个字符串数组,它引用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>
我需要根据字符串的值获取数组中项目的位置。字符串“值2”的索引为1.我显然可以硬编码位置值(0,1等),但如果字符串的顺序发生变化则会中断。我希望代码在位置上独立。以下作品:
int value = Arrays.asList((getResources().getStringArray(R.array.my_options))).indexOf(getString(R.string.my_string_one));
有更紧凑,更简单的方法吗?
答案 0 :(得分:11)
您在问题中显示的代码基本上就是您需要做的。
但是,您可以稍微重构它以使其更具可读性: 将Arrays.asList((getResources()。getStringArray(R.array.my_options)))重构为List(我不知道您的应用程序的代码是什么样的,但您可以将此List存储为实例字段或甚至作为静态(类)字段)。
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));
答案 1 :(得分:0)
也许HashSet可能会帮助您或类似的东西,您将字符串的名称作为键,值作为值。然后,您可以使用键的名称选择值。