我有一个Spinner,它装载了数据库中的数据。
不幸的是,每当android活动(微调器存在于其中)开始时,默认情况下会自动选择微调器的第一项。
有没有办法防止这种情况,即我不希望自动选择微调器的第一项,除非并且直到用户选择。实际上,在用户选择一个项目之前,我不希望任何项目被选中。怎么办呢?
更新1:
我注意到一些奇特的东西。当开始一个包含Spinner的活动时,该活动用本地存储在java(内部数组)中的微调器项填充,toast将第一个微调器项显示为默认选中。
However, the peculiar thing is
当开始包含Spinner的活动时,该Spinner使用存储在数据库中的微调器项填充,toast不会将第一个微调器项显示为选中。现在,这几乎解决了我的问题。但是,即使我想选择第一个微调器项目,我也必须选择其他旋转器项目,为其他旋转器项目获取吐司然后
selecting the first item displays a toast saying that the first item being selected
我什么时候会注意到这种奇怪的事情?
我尝试了所有可能的方法(至少大多数是在StackOverFlow中建议的)来阻止微调器默认选择第一个微调器项。每当我尝试摆脱问题时,我都会注意到上述特殊行为(有StackOverFlow提到的建议)。我进一步注意到的是,即使对于其他来自数据库中的项目的微调器,也会发生这种奇特的事情。
好吧,这太多了。但是,有人得到解释吗?答案 0 :(得分:0)
您可以将arrayadapter的getdropdownview方法覆盖为
ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, state){
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = null;
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
v = super.getDropDownView(position, null, parent);
}
parent.setVerticalScrollBarEnabled(false);
return v;
}
};
这将确保您只在选择区域中看到您的第一个值,而不是在下拉列表中。另外,在从数据库填充列表之前,您可以插入一个空字符串。喜欢&#34;&#34;使用yourlist.add作为第一个值(&#34;&#34;)。 这将为您提供所需的结果。 覆盖的方法在这里出现: https://stackoverflow.com/a/25967740/4282901