使用变量切换到某个微调项目

时间:2014-03-13 17:35:52

标签: android switch-statement spinner

我有:

  • 一个长度未知的字符串数组,里面填充了未知的项目(假设是鱼,鸟,猫)
  • 一个ArrayAdapter和一个显示项目的微调器
  • 包含字符串数组中的一个未知项的变量(假设是cat)

我想将Spinner设置为变量(cat)中的值。什么是最优雅的解决方案?我想过通过循环运行字符串并将项目与变量进行比较(直到我在这个例子中点击了cat),然后使用该迭代的#来设置Spinner的选择,但这看起来很复杂。

或者我应该抛弃旋转器?我环顾四周,找到了一个使用按钮和对话框字段的解决方案:https://stackoverflow.com/a/5790662/1928813

//编辑:我当前的代码。如果可能的话,我想使用“牛”而不必经过循环!

        final Spinner bSpinner = (Spinner) findViewById(R.id.spinner1);
    String[] animals = new String[] { "cat", "bird", "cow", "dog" };
    String animal = "cow";
    int spinnerpos;
    final ArrayAdapter<String> animaladapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, animals);
    animaladapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bSpinner.setAdapter(animaladapter);

    for (Integer j = 0; j < animals.length; j++) {
        if (animals[j].equals(animal)) {
            spinnerpos = j;
            bSpinner.setSelection(spinnerpos);
        } else {
        };
    }

1 个答案:

答案 0 :(得分:0)

(暂时)将您的String数组转换为List,以便您可以使用indexOf

int position = Arrays.asList(array).indexOf(randomVariable);
spinner.setSelection(position);

修改

我现在明白你的问题。如果String数组包含所有唯一值,则可以将它们放在HashMap中进行O(1)检索:

HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < animals.length; i++) {
   map.put(animals[i], i);
} 

String randomAnimal = "cow";
Integer position = map.get(randomAnimal);

if (position != null) bSpinner.setSelection(position);