当我在Android中更改屏幕方向时,会调用Spinner中的OnItemSelectedListener。
这不仅仅是模拟器,也发生在手机上。
如何阻止这种情况发生?
干杯。
答案 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) { }
});