Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onLongClickListener在WebView上不起作用_Android_Webview_Onlongclicklistener - Fatal编程技术网

Android onLongClickListener在WebView上不起作用

Android onLongClickListener在WebView上不起作用,android,webview,onlongclicklistener,Android,Webview,Onlongclicklistener,我有以下结构来实现longclicklistener。如果我在webview上单击包含html链接的文本,它就会工作,因此我知道结构并不是完全错误的 我现在删除了这个链接,监听器再也听不到点击了。有人知道这个问题并提出了一些建议吗 private View.OnLongClickListener mLongClickHandler = new View.OnLongClickListener() { @Override public boolean onLongCli

我有以下结构来实现longclicklistener。如果我在webview上单击包含html链接的文本,它就会工作,因此我知道结构并不是完全错误的

我现在删除了这个链接,监听器再也听不到点击了。有人知道这个问题并提出了一些建议吗

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


我现在试着自己克隆longclick动作。这是可行的,但只有几次。一段时间后,onTouch事件不再被调用。。。建议

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


覆盖webview的onTouch方法,并为ACTION\u DOWN事件返回true。 因此,您将消耗您的down事件

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

事件可能在到达实际webview之前已被webview内容使用。webview只显示一些文本。我在HTC Desire(安卓2.2.2)上也遇到了类似的问题:只有当点击链接时,才会触发OnLongClickListener。请注意,Galaxy S2(与Android 2.3.3配合使用)上从未出现过此问题。
        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;                  
            }
            });
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN:  
            return true;
      }
   }