2011-01-11 3 views
4

J'ai le struktur suivant pour implémenter un longclicklistener. Cela fonctionne si je clique sur un texte sur le webview qui contient un lien html, donc je sais que la structure n'est pas complètement fausse.onLongClickListener ne fonctionne pas sur WebView

J'ai supprimé ce lien maintenant et l'écouteur n'écoute plus les clics. Quelqu'un connaît-il ce problème et a-t-il des conseils?

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

...

mywebview.setOnLongClickListener(mLongClickHandler); 
+0

L'événement est probablement consommé par le contenu de la vue Web avant qu'il ne parvienne à la vue Web réelle. – Falmarri

+0

La webview ne fait que montrer du texte. Et avec html-liens dans le texte un long clic sur cela fonctionne. – nob

+0

J'ai un problème similaire sur HTC Desire (Android 2.2.2): OnLongClickListenerniver jamais viré sauf lorsque le clic se produit sur un lien. Notez que ce problème ne se produit jamais sur un Galaxy S2 (fonctionne avec Android 2.3.3). – Gilbou

Répondre

3

je maintenant essayé de cloner l'action longclick par moi-même. Cela fonctionne mais seulement quelques fois. Après un certain temps, l'onTouch-Event n'est plus appelé ... Suggestions?

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

Remplacer OnTouch Methode de votre WebView et retour vrai pour les événements ACTION_DOWN. Ainsi, vous consommez votre événement vers le bas.

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      return true; 
     } 
    } 
Questions connexes