Delay im aufruf eines Listeners

  • Antworten:1
Mac Systems
  • Forum-Beiträge: 1.727

23.01.2010, 15:32:39 via Website

Folgende Situation: Ich habe einen Spinner, dieser wird vorselektiert:

1final Spinner unitsSpinner = (Spinner) findViewById(R.id.units_spinner);
2 final ArrayAdapter<WindUnit> continentAdapter = new ArrayAdapter<WindUnit>(this,
3 android.R.layout.simple_spinner_item, WindUnit.values());
4 continentAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
5 unitsSpinner.setAdapter(continentAdapter);
6 final int index = IdentityUtil.indexOf(currentSelectUnit.getId(), WindUnit.values());
7 unitsSpinner.setSelection(index);
8 unitsSpinner.setOnItemSelectedListener(getUnitsListener());


Interessanterweise wird der Code des Listeners dennoch aufgerufen, was hier zu einer Exception führt um das verhalten besser sehen zu können:

1private OnItemSelectedListener getUnitsListener()
2 {
3 final OnItemSelectedListener selectionHandler = new OnItemSelectedListener()
4 {
5 @Override
6 public final void onItemSelected(final AdapterView<?> parent, final View view, final int position,
7 final long id)
8 {
9 throw new IllegalArgumentException("Unit Lister aufgerufen.");
10 }
11
12 /*
13 * (non-Javadoc)
14 *
15 * @see
16 * android.widget.AdapterView.OnItemSelectedListener#onNothingSelected
17 * (android.widget.AdapterView)
18 */
19 @Override
20 public final void onNothingSelected(final AdapterView<?> arg0)
21 {
22 }
23
24 };
25 return selectionHandler;
26 }


Kann mir jemand dieses verhalten erklären ? Mir scheint das unlogisch da der Listener nach der Selektion erst gesetzt wird.
Dies sind nur auszuüge aus dem Code ich kann soweit ausschließen das der Listener an anderer stelle noch ausgelöst würde.

mfg,
Mac

PS: Crosspost: http://forum.javacore.de/viewtopic.php?p=63106#63106

— geändert am 23.01.2010, 15:39:34

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

24.01.2010, 00:46:17 via Website

Der Aufruf:

1unitsSpinner.setAdapter(continentAdapter);

ist dafür verantwortlich das der Listener sich so verhält, kommentiere Ich nur diesen aus bekomme Ich keine Exception im Listener zu sehen (testzweck).
Allerdings nützt das nix, brauche ja schließlich Werte in diesem Spinner.

Sollte es was bringen das in die onResume zu verlagern ? Das würde aber dann ebenfalls an anderer Stelle meiner App so gemacht werden, doch das Problem tritt nicht woanders auf.

- Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten