现在的位置: 首页 > 综合 > 正文

android Spinner 重新填充数据后 setSelection 总显示第一项

2013年09月08日 ⁄ 综合 ⁄ 共 863字 ⁄ 字号 评论关闭

        当在做两个spinner联动时,spinner2依据spinner1的选择填充数据,然后使用setSeletion(2)来设置默认项。结果发现:spinner2显示的总是第一项,但是实际选择的确实已经是position 2的位置 。

  解决方法:

  旧代码:

  spinner.setAdapter(adapter);

  spinner.setSelection(2);

         解决方案有二:

  (1)

  spinner.setAdapter(adapter);

  spinner.setSelection(2,true);  //spinner会重新layout

       (2) 推荐

      
spinner.setAdapter(adapter);

  adapter.notifyDataSetChanged();       //通知spinner刷新数据

       spinner.setSelection(2);

        那么,这到底是什么原因造成的?我认为这是一个bug 。这种情况通常发生在重新填充数据之后,除此之外,使用setSelection(int position)都能得到正确的显示。

       setSelection(int position, boolean animate)和setSelection(int position) 实现机制有较大区别,当调用前者时重新layout,立即触发onItemSelected函数,作用相当于用手直接点击。而后者设置了下次选择位置:setNextSelectedPositionInt(position); 然后请求Layout;,而requestLayout并非立即执行,仅仅是一个schedule。但是后者可能在重新装载数据然后Layout时丢失了某些状态。

      

BTW : 一篇介绍比较详细的spinner总结 http://www.blogjava.net/crazycoding/archive/2011/07/09/353981.html

抱歉!评论已关闭.