在Android中,当覆盖触摸事件时,为什么需要调用super.onTouchEvent(event)?

时间:2014-10-26 17:11:40

标签: android ontouchevent gestures

http://www.techotopia.com/index.php/Detecting_Common_Gestures_using_the_Android_Gesture_Detector_Class的教程中,作者包含对super.onTouchEvent(事件)的调用,并提醒您不要忘记它:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
   this.gDetector.onTouchEvent(event);
   // Be sure to call the superclass implementation
   return super.onTouchEvent(event);
}

我想弄清楚为什么这是必要的。在该教程的示例中,我删除了对超类的调用,只返回this.gDetector.onTouchEvent(event),结果没有变化。

4 个答案:

答案 0 :(得分:2)

来自Android来源(Activity.java):

public boolean onTouchEvent(MotionEvent event) {
  if (mWindow.shouldCloseOnTouch(this, event)) {
    finish();
    return true;
  }
  return false;
}

如果覆盖此方法但未调用super.onTouchEvent(event),则不会执行该代码。大多数时候你不希望这种情况发生,即使它似乎没有任何明显的效果。

答案 1 :(得分:1)

您需要调用超级方法。因为如果仅将其留给GestureDetector - 只有手势检测器会接收触摸事件。但是,如果你最后调用super方法。它会将触摸事件传递给层次结构中的其他UI元素。

答案 2 :(得分:0)

super 用于引用父类。所以它在这里用于调用父类的方法onTouchEvent()

答案 3 :(得分:0)

我在使用webview的触摸监听器时遇到问题而没有调用super.onTouchEvent,因为webview不会专注于触摸。我假设使用textarea时问题是一样的。调用超级函数可确保系统采取正确的步骤,例如聚焦视图并打开智能键盘