2011-01-11 17 views
4

Ich habe die folgende Struktur, um einen Longclicklistener zu implementieren. Es funktioniert, wenn ich auf einen Text in der Webansicht klicke, der einen HTML-Link enthält, damit ich weiß, dass die Struktur nicht völlig falsch ist.onLongClickListener funktioniert nicht auf WebView

Ich habe diesen Link jetzt entfernt und der Hörer hört einfach nicht mehr auf Klicks. Kennt jemand dieses Problem und hat einige Ratschläge?

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

... versucht

mywebview.setOnLongClickListener(mLongClickHandler); 
+0

Das Ereignis wird wahrscheinlich von dem Inhalt der Webansicht verbraucht, bevor es in die eigentliche Webansicht gelangt. – Falmarri

+0

Die Webansicht zeigt nichts als einen Text. Und mit HTML-Links im Text funktioniert ein langer Klick darauf. – nob

+0

Ich habe ein ähnliches Problem auf HTC Desire (Android 2.2.2): OnLongClickListenerniver hat nie ausgelöst, außer wenn der Klick auf einen Link passiert. Beachten Sie, dass dieses Problem niemals auf einem Galaxy S2 auftritt (funktioniert mit Android 2.3.3). – Gilbou

Antwort

3

ich jetzt die longclick Aktion von mir zu klonen. Dies funktioniert aber nur wenige Male. Nach einer gewissen Zeit wird das onTouch-Event nicht mehr aufgerufen ... Vorschläge?

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

Aufschalten OnTouch Methode Ihrer Webansicht und zurück für ACTION_DOWN Ereignisse wahr. Dadurch verbrauchen Sie Ihr Down-Event.

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