在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),结果没有变化。
答案 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时问题是一样的。调用超级函数可确保系统采取正确的步骤,例如聚焦视图并打开智能键盘