Spinner的Listener将默认/显示选项检测为ItemSelected?

时间:2012-05-18 21:40:21

标签: android spinner listener

我有一个意图启动活动,页面上有许多微调器。我只是按照this指南设置了我的微调器的ItemSelected侦听器。问题是,每个Spinner中的第一项基本上都是“请选择”,只是因为它不是一个空白框:所以我的ItemSelected监听器检测到Please select在spinner中的事实并且似乎假设它被选中而不是被加载默认情况下。理想情况下,我希望侦听器只检测何时进行实际选择。忽略默认选择的最佳方法是什么?

以下是相关代码:

    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.
    }
}

4 个答案:

答案 0 :(得分:1)

将布尔值设置为false,在onItemSelected中检查它,如果为false,则将其设置为true,不执行任何其他操作。下次,这是正常的,就像你平常那样。

答案 1 :(得分:1)

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

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

我相信你会找到适合你的问题的可能性之一,但也许你还可以详细说明为什么在初始选择时会引发问题onItemSelected(...)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

OP解决方案。

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.
    }
}