Когато създавам дейността си, настройвам Spinner, като му присвоявам слушател и начална стойност. Знам, че обратното извикване onItemSelected
се извиква автоматично по време на инициализация на приложението. Това, което намирам за странно, е, че това се случва два пъти, когато устройството се завърти, което ми създава някои проблеми, които ще трябва да заобиколя по някакъв начин. Това не се случва, ако първоначалната селекция на спинера е нула. Успях да изолирам проблема, ето най-простата дейност, която го задейства:
public class MainActivity extends Activity implements OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("Test","Activity onCreate");
setContentView(R.layout.activity_main);
((Spinner)findViewById(R.id.spinner1)).setSelection(2);
((Spinner)findViewById(R.id.spinner1)).setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> spin, View selview, int pos, long selId)
{
Log.i("Test","spin:"+spin+" sel:"+selview+" pos:"+pos+" selId:"+selId);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
}
И ето logcat, показан, когато приложението се стартира и след това устройството се завърти:
I/Test( 9881): spin:android.widget.Spinner@4052f508 sel:android.widget.TextView@40530b08 pos:2 selId:2
I/Test( 9881): Activity onCreate
I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
Това ли е очакваното поведение? Изпускам ли нещо?