2012-05-18 23 views
1

我有一个意图启动与页面上的一些spinners的活动。我刚刚设置了我的微调器的ItemSelected监听器,遵循this指南。问题是,每个Spinner中的第一个项目基本上都是“请选择”,因此它不是一个空白框:所以我的ItemSelected Listener检测到请选择是在微调器中,似乎假定它被选中而不是加载默认。理想情况下,我希望听众只在发生实际选择时才能检测到。忽略默认选择的最佳方式是什么?Spinner's Listener检测到默认/显示选项为ItemSelected? (已解决)

下面是相关代码:

ageSpinner = (Spinner) findViewById(R.id.ageSpinner); 
    ageAdapter = ArrayAdapter.createFromResource 
    (this, R.array.ageArray, android.R.layout.simple_spinner_item); 
    ageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    ageSpinner.setAdapter(ageAdapter); 
    ageSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, 
     View view, int pos, long id) { 
     Toast.makeText(parent.getContext(), "The planet is " + 
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // Do nothing. 
    } 
} 

编辑〜解决方案

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, 
     View view, int pos, long id) { 
     if (pos != 0) { 
     //this if makes sure it ignores 0, which is 
      //Please Select in the drop down  
     Toast.makeText(parent.getContext(), parent.getTag().toString() + 
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // Do nothing. 
    } 
} 

回答

1

问题在于选择是在第一个布局阶段完成的。因此,第一次计算布局时,Spinner会提高onItemSelected。它非常烦人,但它的工作方式。你可以尝试一些不同的东西,但鉴于你已经有请选择一些东西项目,你能做的最好的就是忽略该事件时所选择的项目为0

+0

编辑我的主要职务,以显示我的解决方案 - 感谢答案! (排除0) – Davek804

1

设置一个布尔值false时,检查它在onItemSelected而如果为假,将其设置为true,别的什么也不做。下一次,如果真的如你所愿的那样做。

1

这里有很多可行的方法。例如,您可以使用反射覆盖Spinner的正常行为,或者直接切换到模仿SpinnerButton,点击它后弹出AlertDialog

但是,其他解决方案可以更容易实现。巴拉克已经命名了一个,而另一种方法是简单地检查Spinner中的选定位置,假设“请选择”将始终是第一项(因此,在位置0),并且您没有进行任何排序项目。

我相信你会发现适合你的问题的可能性之一,但也许你也可以详细说明为什么它的问题onItemSelected(...)被初始选择解雇了吗?