2012-01-28 18 views
11

Mam spinner, który jest wypełniony CursorAdapter. Teraz przy tworzeniu tego spinnera (dynamicznie) chcę ustawić domyślny wybór inny niż 0 (0 jest pierwszym elementem na liście)Android Spinner.setSelection() nie działa

Tak więc otrzymałem program ustawiający dla tego zadania, który jest wywoływany po tym, jak obiekt został stworzony. Ale z jakiegoś powodu, bez względu na to, co przekażę w tym ustawieniu, 0 zawsze jest przekazywane do metody onItemSelected() w obrębie Spinner's OnItemSelectedListener.

JEDNAK, jeśli tylko poczekaj, aż pierwsza selekcja się odbędzie i ponownie uruchom mój seter, wszystko działa poprawnie. Tak więc, aby uczynić go bardziej jasne, oto co widzę w debuggera:

  • obiekt (wirowania) powstaje
  • pokrętła słuchacza jest dołączony
  • seter prowadzony jest pewna liczba, powiedzmy 4 (the spinner zawiera dużo więcej niż 4 pozycje) jest przekazywany do metody setSelection()
  • trochę poczekać
  • TERAZ onItemSelected() prowadzony jest po raz pierwszy, ale biorąc pod uwagę położenie tej metody jest 0!
  • poczekać nieco więcej
  • ponownie uruchamiamy setter
  • ponownie onItemSelected() prowadzony jest tym razem, że pozycja podawana jest 4, jak to miało być!

Teraz jest podłączony. Wydaje się, że nie można ustawić tej tarczy, dopóki pierwszy wybór początkowy, który zawsze wynosi 0, został uruchomiony. Dlaczego tak jest i co mogę zrobić, aby ustawić początkowy wybór?

+1

Czy możesz wpisać kod używany podczas ustawiania Spinnera? Wygląda na to, że może to być spowodowane tym, że masz kod w niewłaściwej kolejności. –

+0

Ta odpowiedź (przy innym pytaniu SO) działała dla mnie: http://stackoverflow.com/a/17370964/1617737 –

Odpowiedz

30

Wypróbuj Spinner#setSelection (int position, boolean animate) z animacją = fałsz. Pamiętam jakiś czas temu, że miałem podobny problem i to załatwiło sprawę. Wydaje się, że wewnętrzna implementacja różni się od różnicy pochodzącej z części animowanej.

+5

działał jak czar. – masi

+0

Pracowałem też dla mnie .. ale nie wiem, dlaczego działa, gdy animacja staje się prawdziwa ... –

1

Jeśli znasz domyślnych przedmiot wybrany pokrętła, można zapisać następująco:

Spinner sp = (Spinner) findViewById(R.id.spinner); 
sp.setSelection(0); // sets the first item 

onItemselectedlistener nazywa po zmianie wyboru elementu tarczy.