Как отключить onItemSelectedListener, который будет вызываться при установке выбранного элемента по коду - PullRequest
32 голосов
/ 19 февраля 2010

Просто интересно, как вы справляетесь со следующей проблемой: результат вычисляется в зависимости от выбранных элементов двух счетчиков. Для управления пользовательским интерфейсом, то есть пользователь выбирает новый элемент в одном из счетчиков, я устанавливаю прослушиватель, используя setOnItemSelectedListener для счетчика в моем методе действия onCreate().

Теперь: это работает, конечно, хорошо. Работа слушателя состоит в том, чтобы запустить новый расчет результата.

Проблема: поскольку я перехватываю onPause() onResume(), чтобы сохранить / восстановить последнее состояние, я получил метод, который устанавливает выбранный элемент этих двух счетчиков программно, как здесь:

startSpinner.setSelection(pStart);
destSpinner.setSelection(pDest);

Эти два вызова также вызывают слушателей! Мой метод вычисления для результата плюс уведомление о новом наборе результатов вызывается здесь дважды!

Глупый прямой подход для этого состоит в том, чтобы иметь логическую переменную , отключающую независимо от того, что слушатель делает внутри, устанавливая его перед установкой выбранных элементов и сбрасывая впоследствии. Хорошо. Но есть ли лучший метод ??

Я не хочу, чтобы слушатели вызывались кодом - действиями, только действиями пользователя! : - (

Как ты это делаешь? Спасибо!

Ответы [ 11 ]

0 голосов
/ 07 июня 2018
    This following method will help you to stop invoking automatically the selection listener


    yourspinnerobj.post(new Runnable() {
                @Override
                public void run() {
                    yourspinnerobj.setOnItemSelectedListener(yourspinnerlistener);
                }
            });
...