Include this override for onDown in your listener:
@Override
public boolean onDown(MotionEvent event) {
return true;
}
From the documentation:
This is because all gestures begin with an onDown() message. If you return false from onDown(), as GestureDetector.SimpleOnGestureListener does by default, the system assumes that you want to ignore the rest of the gesture, and the other methods of GestureDetector.OnGestureListener never get called. This has the potential to cause unexpected problems in your app."
I appreciate that this does not explain why you are still managing to get a longpress detected. If the above resolves your issue, perhaps that is a puzzle that doesn't need solving...