2012-01-28 85 views
11

我有一个微调器,其中填充了CursorAdapter。现在创建微调器(动态)时,我想设置一个不同于0的默认选项(0是CursorAdapter列表中的第一项)Android Spinner.setSelection()不起作用

所以我得到了一个setter,创建。但是由于某种原因,无论我通过那个setter,我总是将其传递给Spinner的OnItemSelectedListener中的onItemSelected()方法。

但是,如果我只是等到第一次初始选择发生并再次运行我的setter,一切正常。因此,使之更加这里清楚是我在调试器中看到:

  • 对象(微调)创建
  • 微调侦听器附加
  • 二传手运行时,一个数字,可以说4(微调的方式包含超过4个选项)传递给setSelection()方法
  • 等一会
  • NOW onItemSelected()运行的第一次,但考虑到该方法的位置为0!
  • 等一会更多
  • 我们再次运行二传手
  • 再次onItemSelected()运行,这时候,给出的排名位置是4,因为它应该是!

现在,这是有线。似乎没有可能设置该微调器,直到第一个初始选择(始终为0)运行。那么为什么它是这样的,我能做些什么来设置初始选择?

+1

您可以发布设置Spinner时使用的代码吗?这听起来像可能是因为你有一些错误的代码 – 2012-01-28 20:09:52

+0

这个答案(在另一个SO问题)为我工作:http://stackoverflow.com/a/17370964/1617737 – 2017-02-02 22:42:24

回答

30

尝试Spinner#setSelection (int position, boolean animate) with animate = false。我记得有一段时间,我遇到过类似的问题,而且这个伎俩。除了来自动画部分的差异之外,内部实现似乎不同。

+5

工作就像一个魅力。 – masi 2012-01-28 21:09:28

+0

工作对我来说..但不知道为什么它的工作时,动画成为真.. – 2017-10-25 09:11:02

1

如果你知道默认的选择微调的项目,它可以写成如下:当您更改微调项目选择

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

onItemselectedlistener被调用。