OnItemSelectedListener在屏幕旋转时调用

问题描述 投票:1回答:3

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

它不仅仅是模拟器,它也发生在物理手机上。

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

干杯。

android spinner screen-orientation
3个回答
2
投票

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

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

你可能能够调用setOnItemSelectedListener()setAdapter()相比的时间,看它是否有帮助。


4
投票

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

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


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) { }
});
© www.soinside.com 2019 - 2024. All rights reserved.