Хобрук: Ваш путь к мастерству в программировании

Есть ли способ удалить onTouchListener из объекта представления?

У меня есть прослушиватель касания для веб-просмотра, но это плохо влияет на функциональность веб-просмотра, поэтому мне интересно, можно ли вообще удалить прослушиватель касания после первоначального взаимодействия?


Ответы:


1

Итак, в вашей деятельности вы должны установить свой переопределенный onTouchListener:

            mWebView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.setOnTouchListener(mWebView.mOnTouchListener);
                return false;
            }
        });

И вам придется создать новый класс, расширяющий WebView. И внутри него вы должны определить OnTouchListener.

    public final OnTouchListener mOnTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent rawEvent) {
        return false;
    }
}; 

Установка для ontouchlistener значения null не сбрасывает его до определения по умолчанию. Вы все равно должны предоставить фактического слушателя.

08.07.2011
  • довольно крутая идея, но не могли бы вы рассказать, как новый класс взаимодействует с mWebView ? Как mWebView попадает в mOnTouchListener? Благодарность! 20.07.2011
  • mWebView не является стандартным элементом управления Android Webview. Вместо этого это созданный вами настраиваемый элемент управления, который представляет собой просто новый класс, наследуемый от WebView. 23.11.2011
  • Кстати, если вы расширяете View, например WebView, вам не нужно реализовывать сенсорный прослушиватель. Представление имеет встроенный метод, который вы реализуете вместо этого: boolean onTouchEvent (MotionEvent event) { ... }. Преимущество создания прослушивателя касаний заключается в том, что вы можете сделать это в каком-то другом классе, таком как Fragment или Activity, который вы уже определили. Таким образом, вам не нужно создавать еще один новый класс. 20.10.2016
  • .. Но что более важно для исходного вопроса, если вы делаете подкласс WebView, в вашем onTouchEvent вы передадите событие исходному классу, вызывая base.onTouchEvent(event) всякий раз, когда вы не делаете справиться с событием самостоятельно. Удаление вашего проблемного сенсорного материала просто означает, что вы устанавливаете некоторый флаг, который вы тестируете, чтобы решить, использовать ли ваш собственный код. Что-то вроде boolean onTouchEvent(MotionEvent event) { if (doMyCustomCode) { .. code here ..; return true; } else return base.onTouchEvent(event); } 20.10.2016
  • .. Или лучше: boolean onTouchEvent(MotionEvent event) { boolean handled = false; if (doMycustomCode) { .. code here that sets handled=true after doing whatever, if it is an event that you respond to .. } if (handled) return true; else return base.onTouchEvent(event); } 20.10.2016

  • 2

    Я искал помощь в Интернете и получил этот пост. Когда я сделал

    myView.setOnTouchListener(null);
    

    мой myView перестал отвечать на onTouch.

    30.08.2013

    3
  • Удаляет ли это прослушиватель касания, чтобы функциональность вернулась в нормальное состояние, или просто устанавливает прослушиватель в нулевое значение, что означает, что веб-просмотр ничего не будет делать при касании? 31.05.2011
  • спасибо за помощь, но я только что протестировал его, и у меня все еще есть те же проблемы с функциональностью. (Например, двойное нажатие для увеличения не работает) 31.05.2011
  • как насчет того, чтобы сделать собственный onTouchListener и вернуть false ?? 31.05.2011
  • Тогда веб-просмотр все еще думает, что у него есть onTouchListener, и не будет выполнять его функции по умолчанию. 31.05.2011
  • Новые материалы

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..