7

我在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>

我需要根据字符串的值获取数组中某个项目的位置。即字符串“Value 2”的索引为 1。我显然可以硬编码位置值(0、1 等),但如果字符串的顺序发生更改,它将中断。我希望代码在位置上是独立的。以下作品:

int value = Arrays.asList((getResources().getStringArray(R.array.my_options))).indexOf(getString(R.string.my_string_one));

有没有更紧凑、更简单的方法来做到这一点?

4

2 回答 2

11

您在问题中显示的代码基本上就是您需要做的。

但是,您可以对其进行一些重构以使其更具可读性: Refactor Arrays.asList((getResources().getStringArray(R.array.my_options))) 到列表中(我不知道您的应用程序的代码是什么样的,但是您可以将此列表存储为实例字段,甚至可以存储为静态(类)字段)。

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));
于 2013-02-04T22:16:17.473 回答
0

也许 HashSet 可能会帮助您或类似的东西,您将字符串的名称作为键,将值作为值。然后您可以选择带有键名的值。

于 2013-02-04T22:11:22.787 回答