Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Spinner.setSelection()不';行不通_Android_Spinner - Fatal编程技术网

Android Spinner.setSelection()不';行不通

Android Spinner.setSelection()不';行不通,android,spinner,Android,Spinner,我有一个微调器,其中填充了一个光标或适配器。现在,在创建微调器(动态)时,我希望将默认选择设置为不同于0(0是CursorAdapter列表中的第一项) 因此,我为该作业设置了一个setter,该作业在创建对象后刚刚调用。但出于某种原因,无论我在该setter中传递什么,0总是传递给微调器的OnItemSelectedListener中的onItemSelected()方法 然而,如果我只是等到第一次初始选择发生,并再次运行我的setter,一切正常。因此,为了更清楚地说明这一点,我在调试器中看

我有一个微调器,其中填充了一个
光标或适配器
。现在,在创建微调器(动态)时,我希望将默认选择设置为不同于0(0是
CursorAdapter
列表中的第一项)

因此,我为该作业设置了一个setter,该作业在创建对象后刚刚调用。但出于某种原因,无论我在该setter中传递什么,0总是传递给微调器的
OnItemSelectedListener
中的
onItemSelected()
方法

然而,如果我只是等到第一次初始选择发生,并再次运行我的setter,一切正常。因此,为了更清楚地说明这一点,我在调试器中看到了以下内容:

  • 对象(微调器)已创建
  • 已附加微调器侦听器
  • setter运行时,一个数字,比如说4(微调器包含超过4个选择)被传递给
    setSelection()
    方法
  • 稍等
  • 现在,第一次运行的是
    onItemSelected()
    ,但该方法的位置为0
  • 再等一会儿
  • 我们再次运行setter
  • 再次运行
    onItemSelected()
    ,这一次,给定的位置是4,正如它应该的那样

现在这是有线的。在运行第一个初始选择(始终为0)之前,似乎无法设置该微调器。那么,为什么会是这样?我可以做些什么来设置初始选择?

尝试
微调器#设置选择(int-position,boolean-animate)
使用animate=false。我记得不久前我也遇到过类似的问题,这就成功了。除了动画部分的差异外,内部实现似乎有所不同。

如果您知道默认的选定微调器项,则可以按如下方式编写:

Spinner sp = (Spinner) findViewById(R.id.spinner);
sp.setSelection(0);   // sets the first item 

当您更改微调器项目选择时,将调用onItemselectedlistener。

您能否发布设置微调器时使用的代码?听起来可能是因为您的某些代码顺序错误。这个答案(关于另一个SO问题)对我很有用: