1

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

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

我怎样才能阻止这种情况发生?

干杯。

4

3 回答 3

4

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

您还需要非常小心可以看到 View.GONE 的微调器。当我有时间准确描述如何处理这些问题时,我将在此处添加更多文本。

于 2014-09-26T10:35:03.907 回答
2

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

我怎样才能阻止这种情况发生?

setOnItemSelectedListener()您可能可以比较一下您打电话的时间setAdapter(),看看它是否有帮助。

于 2010-11-20T20:09:07.557 回答
1

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

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) { }
});
于 2018-04-30T12:43:24.720 回答