当在做两个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时丢失了某些状态。


原文地址:http://www.xuebuyuan.com/672724.html

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android(安卓)开发: eclipse更新SDK,eclipse如何更新SDK
  4. Android开源项目总结
  5. Android:onNewIntent的使用
  6. Android(安卓)Adapter总结
  7. 百度Android定位API使用指南
  8. Android复习资料1
  9. Android(安卓)avd 在电脑上创建sdcard

随机推荐

  1. Android之layout属性介绍
  2. 玩转Android---UI篇---TextView(文本框)
  3. Andriod AOA协议通信总结
  4. Akita 一套Android快速开发库 发布1.2版
  5. Android与js交互实例
  6. [转]android单元测试初探——Instrumenta
  7. Android(安卓)Developers 系列 01 - Intr
  8. Android应用程序请求SurfaceFlinger服务
  9. Android(安卓)SDK中tools详解
  10. 怎样搭建Android开发平台