Android: GestureDetector не работает (gestureDetector.onTouchEvent (событие) всегда false) с вкладками (TabActivity, Tabwidget)

Я внедрил свою TabActivity с различными дочерними процессами:

intent = new Intent().setClass(this, MyChildTabActiviy.class); // Initialize a TabSpec for each tab and add it to the TabHost spec = getTabHost.newTabSpec("tag").setIndicator("indicator", getResources().getDrawable(R.drawable.icon)).setContent(intent); getTabHost.addTab(spec); ... 

Пока нет проблем, все работает отлично. Я переключаюсь программно между вкладками, заменяя действия внутри вкладок с помощью ActivityGroups и т. Д., Как это показано во многих учебниках.

Но моя проблема заключается в том, что когда я хочу проверить, что мой жест gestureDetector.onTouchEvent (событие) всегда возвращает false, при этом жест не регистрируется.

Это моя реализация gestureDetector:

 public class MyChildTabActiviy extends Activity { @Override public void onCreate(Bundle savedInstanceState) { // ... building views, controls, etc. GestureDetector gestureDetector = new GestureDetector(this, new MyGestureDetector()); } @Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; // left to right swipe and right to left swipe if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { //... fling logic ... return true; } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { //... fling logic ... return true; } return false; } } 

Дело в том, что этот код (а также обнаружение опрокидывания) отлично работает, когда я начинаю эти действия (есть четыре основных действия, которые я иногда переключаю на другие действия) вне TabActivity, например, в качестве действия Launcher , Но я не могу заставить его работать в TabActivity. Я уже пытался добавить GestureDetector в TabActivity, но он не работает. Я попытался добавить GestureDetector к определенным представлениям, например, к макетам или кнопкам, ViewFlippers и т. Д., Но он просто не работает. Когда я отлаживаю, я вижу, что событие касания запускается, и движение регистрируется, но оно просто не оценивается как бросок или любой другой жест.

Итак, мой вопрос: существуют ли какие-либо ограничения в отношении использования GestureDetectors с вкладками в Android? Как я уже сказал, жесты регистрируются совершенно вне TabActivity.

Я был бы очень признателен за помощь того, кто знает ответ. Если есть ограничение, как может кто-то получить обходной путь для этой проблемы?

Заранее благодарим за ответы.

Solutions Collecting From Web of "Android: GestureDetector не работает (gestureDetector.onTouchEvent (событие) всегда false) с вкладками (TabActivity, Tabwidget)"

Посмотрите на упомянутый здесь ответ. Он в значительной степени сделал то же самое, что и вы, но если вы посмотрите на первый комментарий о наивысшем рейтинге, Cdsboy заставил его работать, реализовав OnDown и вернувшись. Я не уверен, зачем это нужно, но это сработало для меня.

В дополнение к ответу @Abhinav (что также помогло мне), я бы хотел сказать, что я считаю, что переопределение onDown() необходимо, потому что его реализация по умолчанию в SimpleOnGestureListener должна возвращать false . Будучи ACTION_DOWN первым, кто достигнет слушателя, он заставит его отказаться от события, что бы это ни было.