Мой вопрос касается эффектов вызова setOnTouchListener несколько раз с тем же или другим слушателем.
view.setOnTouchListener (myListener);
Я понимаю, что это приведет к вызову метода public boolean onTouch (View v, MotionEvent event) в классе myListener в событиях движения. Я не понимаю, что происходит, когда я позже назову это:
view.setOnTouchListener (myOtherListener);
Действительно ли myListener получает события движения?
Кроме того, если я позвоню
view.setOnTouchListener (myListener);
Опять же, вызывает ли он myListener.onTouch дважды в каждом событии касания? Наконец, как отказаться от подписки в качестве слушателя?
Я просмотрел руководство для разработчиков, но не нашел ничего конкретного, чтобы узнать, как это или аналогичные setListeners работало, но если у кого-то есть удобная закладка или он знает, как это работает, то это будет оценено по достоинству.
Общее правило – когда функция начинается с «set», она заменяет предыдущий прослушиватель. Если вы хотите view.setOnTouchListener(null);
регистрацию слушателя, используйте view.setOnTouchListener(null);
,
view.setOnTouchListener(myListener); /* myListener is active */ view.setOnTouchListener(myOtherListener); /* myListener is inactive, myOtherListener is active */ view.setOnTouchListener(myListener); /* myListener is active, myOtherListener is inactive */
Если есть аддитивная логика, вы обычно увидите префикс add
или register
в имени функции. Например, TextView.addTestChangedListener()
и Context.registerReceiver()
.