在Android中删除Spinner项的默认值

时间:2015-03-25 16:21:18

标签: android-layout android-activity spinner android-spinner

我有一个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提到的建议)。我进一步注意到的是,即使对于其他来自数据库中的项目的微调器,也会发生这种奇特的事情。

好吧,这太多了。但是,有人得到解释吗?

1 个答案:

答案 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