2011-01-11 3 views
4

У меня есть следующая структура для реализации longclicklistener. Он работает, если я нажимаю на текст в webview, который содержит html-ссылку, поэтому я знаю, что структура не совсем ошибочна.onLongClickListener не работает на WebView

Я удалил эту ссылку сейчас, и слушатель просто больше не прослушивает клики. Кто-нибудь знает эту проблему и имеет какие-то советы?

private View.OnLongClickListener mLongClickHandler = new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View view) { 
     ... 
     return true; 
    } 
}; 

...

mywebview.setOnLongClickListener(mLongClickHandler); 
+0

Событие, вероятно, потребляется содержимым веб-страниц, прежде чем оно попадет в реальный веб-просмотр. – Falmarri

+0

Веб-просмотр ничего не показывает, кроме какого-то текста. И с html-ссылками внутри текста длинный щелчок на этом работает. – nob

+0

У меня аналогичная проблема на HTC Desire (Android 2.2.2): OnLongClickListenerniver никогда не запускался, кроме случаев, когда клик происходит по ссылке. Обратите внимание, что эта проблема никогда не происходит на Galaxy S2 (работает с Android 2.3.3). – Gilbou

ответ

3

Я пытался теперь клонировать действие longclick сам. Это работает, но только несколько раз. Через некоторое время onTouch-Event больше не вызывается ... Предложения?

private Runnable copyTextAfterDelay=new Runnable() { 
    public void run() { 
     ... 
    } 
}; 

...

 myWebView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         mTimerHandler.removeCallbacks(copyTextAfterDelay); 
         mTimerHandler.postDelayed(copyTextAfterDelay,1000); 
         break; 
        case MotionEvent.ACTION_UP: 
         mTimerHandler.removeCallbacks(copyTextAfterDelay); 
         break; 
        case MotionEvent.ACTION_MOVE: 
         mTimerHandler.removeCallbacks(copyTextAfterDelay); 
         break; 
       } 
       return false;     
      } 
      }); 
3

Override onTouch Methode вашего WebView и возвращает истину для ACTION_DOWN событий. Таким образом, вы потребляете свое событие вниз.

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      return true; 
     } 
    } 
Смежные вопросы