从Spinner选择中获取值

时间:2013-07-09 20:36:14

标签: java android spinner

我希望微调器在用户选择项目后向我返回一个值。

我知道我可以使用一个按钮然后在OnClick()中使用spinner.getSelectedItemPosition(),但是我希望在用户在微调器选项中选择后立即返回该值。因此,我曾想过使用OnItemSelectedListener。

int valueINeed;
subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();
            //I now want to somehow get the value of the index for use outside of this code block
}

我显然不能使用直接return语句,因为该方法具有void返回类型。此外,我无法设置valueINeed = index,除非我创建了valueINeed final。我不确定我是否愿意这样做,如果用户改变他/她的想法会发生什么,我需要重新分配价值?

谢谢!

2 个答案:

答案 0 :(得分:1)

只需将变量int valueINeed;声明为全局变量即可。你可以使用以下内容:

subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
            int arg2, long arg3) {
        valueINeed = subGoalSpinner.getSelectedItemPosition();
        //I now want to somehow get the value of the index for use outside of this code block
}

答案 1 :(得分:0)

TronicZomB的答案是正确的,但是当全局变量发生变化时,您将不会收到通知。如果您需要在valueINeed中更改Spinner后立即执行某项操作,则有两种选择:

  1. 使用valueINeed的代码并将其全部放在onItemSelected函数
  2. 创建一个单独的函数,您可以在onItemSelected函数中调用。
  3. #2的例子:

    subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() 
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
        {
            valueINeed = subGoalSpinner.getSelectedItemPosition();
            updateView(valueINeed);
        }
    }
    

    在这种情况下,updateView是一个函数,它将valueINeed作为参数并对其执行某些操作(例如更新TextView)。