我想使用最初(当用户尚未做出选择时)显示文本“选择一个”的 Spinner。当用户单击微调器时,将显示项目列表并且用户选择其中一个选项。用户做出选择后,所选项目将显示在 Spinner 中,而不是“Select One”。
我有以下代码来创建 Spinner:
String[] items = new String[] {"One", "Two", "Three"};
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
使用此代码,最初会显示项目“One”。我可以在项目中添加一个新项目“Select One”,但随后“Select One”也将作为第一项显示在下拉列表中,这不是我想要的。
我该如何解决这个问题?
原文由 Pieter Kuijpers 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个覆盖
Spinner
视图的通用解决方案。它覆盖setAdapter()
将初始位置设置为 -1,并代理提供的SpinnerAdapter
以显示位置小于 0 的提示字符串。这已经在 Android 1.5 到 4.2 上进行了测试,但买家要小心!由于此解决方案依赖反射调用私有
AdapterView.setNextSelectedPositionInt()
和AdapterView.setSelectedPositionInt()
,因此不能保证在未来的操作系统更新中正常工作。看起来很可能会,但绝不能保证。通常我不会容忍这样的事情,但是这个问题已经被问了足够多的时间,而且我认为我会发布我的解决方案似乎是一个足够合理的要求。