【问题标题】:Android Spinner.setSelection() doesn't workAndroid Spinner.setSelection() 不起作用
【发布时间】:2017-06-23 15:25:26
【问题描述】:

我有一个装有CursorAdapter 的微调器。现在,当(动态)创建该微调器时,我想设置一个不同于 0 的默认选择(0 是 CursorAdapter 列表中的第一项)

所以我得到了一个在对象创建后刚刚调用的作业的设置器。但是由于某种原因,无论我在那个 setter 中传递什么,0 总是传递给 Spinner 的 OnItemSelectedListener 中的 onItemSelected() 方法。

但是,如果我等到第一次初始选择发生并再次运行我的设置器,一切正常。所以,为了更清楚,这里是我在调试器中看到的:

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

现在已经连线了。在第一个初始选择(始终为 0)运行之前,似乎无法设置该微调器。那么为什么会这样?我该怎么做才能设置初始选择?

【问题讨论】:

  • 能否请您发布设置 Spinner 时使用的代码?听起来可能是因为您的某些代码顺序错误
  • 这个答案(关于另一个 SO 问题)对我有用:stackoverflow.com/a/17370964/1617737

标签: android spinner


【解决方案1】:

尝试Spinner#setSelection (int position, boolean animate) 与 animate = false。我记得前段时间我遇到了类似的问题,这成功了。除了来自动画部分的差异之外,内部实现似乎有所不同。

【讨论】:

    【解决方案2】:

    如果你知道默认选择的spinner item,可以这样写:

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

    onItemselectedlistener 在您更改微调器项目选择时被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 2016-05-26
      • 2013-06-03
      • 2016-06-19
      • 2015-04-21
      • 2018-10-15
      • 2011-04-03
      • 2016-12-03
      相关资源
      最近更新 更多