Как вы можете установить прослушиватель событий для Spinner при изменении выбранного элемента?
По сути, я пытаюсь сделать что-то похожее на это:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
android
events
spinner
android-spinner
Сони Али
источник
источник
Ответы:
Некоторые из предыдущих ответов не верны. Они работают для других виджетов и представлений, но документация для виджета Spinner четко гласит:
Вместо этого лучше использовать OnItemSelectedListener () :
Это работает для меня.
Обратите внимание, что метод onItemSelected также вызывается во время построения представления, поэтому вы можете рассмотреть возможность помещения его в
onCreate()
вызов метода.источник
onItemSelected(...)
не ударил. (Я знаю, потому что я только что нашел это трудным путем.)Примечание: помните одну вещь.
OnItemSelectedListener
Событие Spinner будет выполнено дважды:Попробуйте различить эти два с помощью флаговой переменной.
источник
Вы можете реализовать
AdapterView.OnItemSelectedListener
класс в вашей деятельности.А затем используйте следующую строку в
onCreate()
Затем переопределите эти два метода:
источник
https://stackoverflow.com/q/1714426/811625
Вы можете избежать вызова OnItemSelectedListener () с помощью простой проверки: сохраните текущий индекс выбора в целочисленной переменной и проверьте в onItemSelected (..), прежде чем что-либо делать.
Например:
Конечно, это
iCurrentSelection
должно быть в объеме объекта, чтобы это работало!источник
iCurrentSelection
переменная объявлена в этом анонимном классе, она будет работать нормально. Вы можете инициализировать его -1, чтобы код выполнялся при первом вызове.Найдите свое имя счетчика и найдите id, затем реализуйте этот метод.
источник
Не имеет значения, будете ли вы устанавливать OnItemSelectedListener в onCreate или onStart - он все равно будет вызываться во время создания или запуска Activity (соответственно).
Таким образом, мы можем установить его в onCreate (а НЕ в onStart!).
Просто добавьте флаг, чтобы выяснить первую инициализацию:
тогда в onCreate (или onCreateView) просто:
источник
Документы для спиннер-виджет говорит
Вы должны использовать
setOnItemSelectedListener
для решения вашей проблемы.источник
источник
возьмите глобальную переменную для текущего выбора счетчика:
источник
Если вы хотите истинный onChangedListener (). Сохраните начальное значение в обработчике и проверьте, изменилось ли оно. Это просто и не требует глобальной переменной. Работает, если у вас есть более одного счетчика на странице.
...
Объекты - ваш друг, используйте их.
источник
источник
Это будет работать инициализировать спиннер и findviewbyid и использовать это будет работать
источник
Самый лучший способ , что я думаю , что будет иметь
flagitemselected = 0;
инonCreate()
. А пункт выбран приращением события, флаг , т.е.flagitemselected++
; а затем проверьтеЭто поможет, я думаю.
источник
Один трюк, который я нашел, заключался в том, чтобы поместить ваши setOnItemSelectedListeners в onWindowFocusChanged вместо onCreate. Я не нашел никаких побочных эффектов, если бы сделал это таким образом. По сути, настройте слушателей после того, как окно будет нарисовано. Я не уверен, как часто запускается onWindowFocusChanged, но достаточно легко создать себе переменную блокировки, если вы обнаружите, что она работает слишком часто.
Я думаю, что Android может использовать систему обработки сообщений, и если вы поместите все это в onCreate, вы можете столкнуться с ситуациями, когда спиннер заполняется после того, как он обращается. Таким образом, ваш слушатель отключится после того, как вы установите местоположение элемента. Конечно, это обоснованное предположение, но не стесняйтесь меня поправлять.
источник
По умолчанию вы получите первый элемент массива счетчиков через
всякий раз, когда вы выбрали значение в счетчике, это даст вам выбранное значение
если вы хотите положение выбранного элемента, сделайте это так
два приведенных выше ответа без применения слушателя
источник