Spinner无法选择任何值

这个可以算是Android框架的一个bug了。

问题描述:使用ArrayAdaptor动态为Spinner添加值,程序运行后,点击Spinner可以显示下拉框,但是选择一个值后,Spinner没有任何变化(一直是空白),而且Spinner对象不会触发onItemSelected事件。

出问题的截图:

中间的那个三角形,其实是Spinner的按钮,图中Spinner没有任何值,一片空白。即使Adaptor中数据加载完成,下拉框中能正确显示所有加载的值,也再无法正确为Spinner选择值了。

解决方案

我们必须为Spinner指定一个默认值,也就是说我们使用ArrayAdaptor为Spinner添加值时,在向Spinner指定Adaptor之前,Adaptor关联的数组中必须有一个元素作为默认值,否则就会触发这个bug。

正确的代码:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
stringList = new ArrayList<>();
stringList.add("default");
ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, stringList);
stringArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(stringArrayAdapter);

正确的运行效果:

如果Spinner的选项全部是从网络异步加载而来的,那么如何给Adaptor指定默认值呢?此时。我们的做法是等数据加载完,再调用setAdapter()方法。

总结

总结来说,就是Spinner必须有默认值,否则不能正常工作。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap