我目前在我的应用程序中有一大堆微调器。我没有想太多,对于每个微调器,第一个索引都用N/A
. 这没什么大不了的,但我希望让它更干净一些。
我想知道是否有一种方法可以代替调用setSelection( index )
,我想知道是否有一种方法可以将 Spinner 设置为没有选择任何内容。
基本上,我希望微调器中有一个项目列表,但在单击它之前不显示它们。我也不希望顶部有一个空白索引。
我认为很有可能没有办法做到这一点,所以如果有人确定这一点,请告诉我。
谢谢。
最好将第一个位置设置为空白,以便可以将其视为未选中。
微调器必须具有选定状态。我建议有一个“无选择”选项
另一种选择是选择底部按钮,然后将该按钮设置为不可见(我将最后一个按钮设置为选中的原因是这样您的应用程序中就没有一大块空白空间,因为这看起来有点垃圾):
case SPINNER_OPTION_FIRST:
yourSpinnerLabel.setVisibility(View.VISIBLE);
yourTextField.setVisibility(View.VISIBLE);
break;
// do this for all your other ones if you want
case SPINNER_OPTION_LAST:
yourSpinnerLabel.setVisibility(View.GONE);
yourTextField.setVisibility(View.GONE);
也许不是最有效的,但它有效,所以我希望能有所帮助(还是新的,所以让我放松一下)!
修改保存数据的列表可能会导致大量错误或难以管理数据。您可以使用 NONE 项目在适配器中添加项目,而不是操作列表。像这样
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
adapter.add("NONE");
adapter.addAll(products);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
我试过
// getSelectedItemPosition() returns -1 if there is nothing selected
spinner.setSelection(-1);
但它失败了[微调器正在设置列表中的第一个元素]。
我在模拟“未选择任何内容”的微调器数据中添加了“空位置”。请注意,“空位”在“下拉”列表中不可见。
顺便提一句。对不起 C#,希望这个概念清晰可见。
自定义适配器:
class CustomAdapter<T> : ArrayAdapter<T> {
public override int Count {
get { return base.Count - 1; }
}
}
初始化微调器:
var data = new List<string> { "elem 1", "elem 2", "" };
spinner.Adapter = new CustomAdapter<String>(this, Resource.Layout.SimpleSpinnerItem, data);
spinner.SetSelection(2);