我正在寻找一种方法来隐藏Android微调框小部件中的一个项目.这将允许您模拟没有选择项目的微调器,并确保始终为所选的每个项目调用onItemSelected()回调(如果隐藏项目是"当前"项目).通常,微调器中总有一个项不会生成回调,即当前的回调.
stackoverflow上有一些关于如何禁用(灰显)项目的代码,而不是如何完全隐藏项目,就好像它们不存在一样.
经过多次实验,我想出了一个适用于各种新旧Android平台的黑客解决方案.它有一些小的化妆品缺点,很难注意到.我仍然希望听到一个更正式的解决方案,除了"不要用旋转器做那个".
这总是隐藏微调器中的第一个项目,但可以相当容易地扩展以隐藏任意项目或多个项目.在微调器项列表的开头添加一个包含空字符串的虚拟项.您可能希望在微调器对话框打开之前将当前微调器选择设置为项目0,这将模拟未选择的微调器.
使用ArrayAdapter方法的Spinner设置示例覆盖:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv; …Run Code Online (Sandbox Code Playgroud)