Android Spinner.setSelection () не работает - PullRequest
11 голосов
/ 28 января 2012

У меня есть счетчик, который заполнен CursorAdapter. Теперь при создании этого счетчика (динамически) я хочу установить выбор по умолчанию, отличный от 0 (0 - первый элемент в списке CursorAdapter)

Итак, я получил установщик для этой работы, который вызывается только после создания объекта. Но по какой-то причине, независимо от того, что я передаю в этом установщике, 0 всегда передается методу onItemSelected() в Spinner's OnItemSelectedListener.

ОДНАКО, если я просто подожду, пока произойдет первый первоначальный выбор, и снова запустлю мой установщик, все работает нормально. Итак, для ясности вот что я вижу в отладчике:

  • объект (прядильщик) создан
  • Прикрепленный слушатель блесны
  • Установщик запущен, число, скажем, 4 (счетчик содержит более 4 выборок) передается в метод setSelection()
  • ПОДОЖДИТЕ БИТ
  • СЕЙЧАС onItemSelected() запускается в первый раз, но позиция, присвоенная этому методу, равна 0!
  • ПОДОЖДИТЕ БОЛЬШЕ
  • снова запускаем сеттер
  • снова onItemSelected() запускается, В ЭТО ВРЕМЯ, заданная позиция 4, как это и должно было быть!

Теперь это проводная связь. Кажется, невозможно установить этот счетчик до тех пор, пока не будет запущен первый начальный выбор, который всегда равен 0. Так почему же это так и что я могу сделать, чтобы установить первоначальный выбор?

Ответы [ 2 ]

31 голосов
/ 29 января 2012

Попробуйте Spinner#setSelection (int position, boolean animate) с animate = false.Я помню, некоторое время назад у меня была похожая проблема, и это помогло.Кажется, что внутренняя реализация отличается от разницы, исходящей от одушевленной части.

0 голосов
/ 29 января 2012

Если вам известен выбранный по умолчанию элемент счетчика, его можно записать следующим образом:

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

onItemselectedlistener вызывается при изменении выбора элемента счетчика.

...