1

Androidで画面の向きを変更すると、スピナーのOnItemSelectedListenerが呼び出されます。

これはエミュレーターだけでなく、物理的な電話でも発生します。

これを防ぐにはどうすればよいですか?

乾杯。

4

3 に答える 3

4

また、Androidが回転前の位置に設定するため、画面が回転したときにスピナーのselectedItemPositionがゼロでない場合にも、2回目の呼び出しが発生します。onSaveInstanceStateを使用して、ゼロ以外の位置にあるスピナーの数をカウントし、このカウントを使用して、カウントがゼロにデクリメントされるまでOnItemSelectedコードが返されるようにします。

また、View.GONEを表示できるスピナーには細心の注意を払う必要があります。これらの処理方法を正確に説明する時間を見つけたら、ここにさらにテキストを追加します。

于 2014-09-26T10:35:03.907 に答える
2

スピナーは常に選択されています。が最初に設定されたときを含め、OnItemSelectedListenerの状態に変化があったときに呼び出されます。通常の向きの変更により、アクティビティが破棄されて再作成されます。したがって、アクティビティが最初に画面に表示されたときに呼び出されている場合は、向きが変更されたときに再度呼び出されます。SpinnerSpinnerOnItemSelectedListener

これを防ぐにはどうすればよいですか?

setOnItemSelectedListener()と比較して、電話をかけるタイミングをいじってsetAdapter()、それが役立つかどうかを確認できる場合があります。

于 2010-11-20T20:09:07.557 に答える
1

スピナーにアダプターが含まれる前にが呼び出されるため、次のように、メソッドOnItemSelectedListener内でビューがnullでないことを検証する必要があります。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 に答える