我希望微调器在用户选择项目后向我返回一个值。
我知道我可以使用一个按钮然后在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
。我不确定我是否愿意这样做,如果用户改变他/她的想法会发生什么,我需要重新分配价值?
谢谢!
答案 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
后立即执行某项操作,则有两种选择:
valueINeed
的代码并将其全部放在onItemSelected
函数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
作为参数并对其执行某些操作(例如更新TextView
)。