3

我一直在研究有关微调器以及何时触发 onItemSelected 的线程。我得出的结论是,无论您是手动选择微调器项目还是通过 spinner.setSelection(position) 方法以编程方式选择项目都会触发它。

我的问题是我的代码中首先调用了 OnItemSelected 回调方法,但是在其他几个方法完成执行后才执行它。这是不受欢迎的行为,因为我的代码逻辑依赖于按顺序执行的某些步骤。

if(conition is true)
  fillSpecialtySpinner();

if(another condition is true)
  fillSubSpecialtySpinner();

fillSpecialtySpinner() 方法包含 spinner.setSelection(position) 行代码。但不知何故,它在检查第二个 if 并且 fillSubSpecialtySpinner 完成执行之后执行。

任何帮助,将不胜感激。先感谢您!

4

2 回答 2

0

如果我理解正确,您希望确保该fillSubSpecialtySpinner()方法仅在specialitySpinner.onItemSelected().

fillSubSpecialtySpinner()能从内部打电话specialitySpinner.onItemSelected()吗?

于 2012-05-29T09:49:16.660 回答
0

是的,在执行所有其他函数之前,回调不会发生,广告 Baqueta 说。

因此,您不能执行诸如将布尔值设置为 false 之类的操作,对微调器进行更改(如果布尔值为 true,则执行 onItemSelected 中的代码),然后将其设置为 true,因为在您的布尔值变为 true 后,该函数将被调用。

但是,我对这个问题有一个简单而通用的解决方案(请参阅该问题的公认答案):

不需要的 onItemSelected 调用

于 2014-03-15T19:54:24.407 回答