OnItemSelectedListener在屏幕旋转时调用

时间:2010-11-20 19:51:29

标签: android spinner screen-orientation

当我在Android中更改屏幕方向时,会调用Spinner中的OnItemSelectedListener。

这不仅仅是模拟器,也发生在手机上。

如何阻止这种情况发生?

干杯。

3 个答案:

答案 0 :(得分:4)

如果在旋转屏幕时微调器的selectedItemPosition不为零,您还将获得第二个调用,因为Android将位置设置为旋转前的位置。使用onSaveInstanceState计算非零位置的微调器数量并使用此计数,以便OnItemSelected代码返回,直到计数减少到零。

您还需要非常小心可以看到View.GONE的微调器。当我能找到时间来描述如何处理这些时,我会在这里添加更多文本。

答案 1 :(得分:2)

始终选择旋转器。当OnItemSelectedListener的状态发生任何变化时,系统会调用Spinner,包括首次设置Spinner时。正常的方向更改将导致您的活动被销毁并重新创建。因此,如果您的活动首次出现在屏幕上时调用了OnItemSelectedListener,则会在更改方向时再次调用它。

  

如何阻止这种情况发生?

您可以使用与setOnItemSelectedListener()相比调用setAdapter()的时间,以查看它是否有帮助。

答案 2 :(得分:1)

在微调器包含其适配器之前调用OnItemSelectedListener,因此您需要在OnItemSelected方法中验证视图不为null,如下所示:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
  @Override public void onItemSelected (AdapterView<?> parent, View view, int position, long id){
    if(view != null) { // <- here is the validation
      // Your code to do something with the selected item
    }
  }
  @Override public void onNothingSelected(AdapterView<?> parent) { }
});