Spinner在初始化时会自动调用一次OnItemSelectedListener事件,
但在实际开发过程中,我们不需要此功能.本人通过总结,终于找到最简单的解决方法 
提供的解决办法:
第一步:设定Spinner数据源
第二步:注册事件之前调用 spinner.setSelection(0, true);
第三步:注册事件
第四步:将事件中判断 spinner选择索引结果为0,则退出事件处理
    if (arg2==0)
    {
return;
    }这样OnItemSelectedListener事件不会被触发 private void initMySpinner() {
        String[] phones = {"iPhone","Android","BlackBerry"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,  android.R.layout. simple_spinner_item,
                phones);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setPrompt("test");
        spinner.setSelection(0, true);
        spinner.setOnItemSelectedListener(new SpinnerOnSelectedListener());
    }  private class SpinnerOnSelectedListener implements     OnItemSelectedListener {
 
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
            //退出事件处理(初始化)
    if (arg2==0)
    {
return;
    }
          //处理你选择的事件
          ................
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub }
}

解决方案 »

  1.   

    这也叫最简单,BS,应该这样:
    boolean first=true;if(first) { first=false;} else { 事件处理代码; }
      

  2.   

    为什么不用   setSelected(0,true)
      

  3.   

    木有这个方法
    spinner.setSelection(0, false);
      

  4.   

    木有这个方法
    spinner.setSelection(0, false);这个方法在安卓7.0无效
      

  5.   

    按1楼提供的思路,优化了一下:
    private boolean isFirst = true;
    Spinner.post(new Runnable() {

    @Override
    public void run() {
    isFirst = false;
    }
    });
    我觉得这样会更好!