1

一旦用户选择了一个项目,我希望微调器向我返回一个值。

我知道我可以使用一个按钮,然后在 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。我不确定我是否要这样做,因为如果用户改变主意并且我需要重新分配值会发生什么?

谢谢!

4

2 回答 2

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
}
于 2013-07-09T20:41:11.717 回答
0

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

  1. 获取使用的代码valueINeed并将其全部放入onItemSelected函数中
  2. 创建一个从函数内部调用的单独onItemSelected函数。

#2 的例子:

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

在这种情况下,updateView是一个函数,它接受valueINeed一个参数并用它做一些事情(比如更新 a TextView)。

于 2013-07-09T20:56:26.520 回答