Android: GestureDetector не работает (gestureDetector.onTouchEvent (event) всегда 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 (event) всегда возвращает 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, например, как активность запуска. Но я не могу заставить его работать в TabActivity. Я уже пытался добавить GestureDetector к TabActivity, но он не работает. Я попытался для добавления GestureDetector к конкретным видом, как некоторые виды макета или кнопки, ViewFlippers и т. д. но это просто не работает. Когда я отлаживаю, я вижу, что событие touch запускается и регистрируется движение, но оно просто не оценивается как бросок или любой другой жест.
Итак, мой вопрос: существуют ли какие-либо ограничения в отношении использования GestureDetectors с вкладками в Android? Как я уже сказал, жесты регистрируются совершенно вне TabActivity.
Я был бы очень признателен за помощь того, кто знает ответ. Если есть ограничение, как кто-то может получить обходной путь для этой проблемы?
заранее спасибо за ответы.
2 ответов
взгляните на упомянутый ответ здесь. Он в значительной степени сделал то же самое, что и вы, но если вы посмотрите на первый комментарий к ответу с самым высоким рейтингом, Cdsboy заставил его работать, реализовав OnDown и вернув true. Я не уверен, зачем это нужно, но это сработало для меня.
в качестве дополнения к ответу @Abhinav (это кстати мне тоже помогло), я хотел бы сказать, что я думаю, переопределяя onDown()
необходимо, потому что его реализация по умолчанию в SimpleOnGestureListener
- вернуть false
. Бытие ACTION_DOWN
первый, кто достигнет слушателя, заставит его отказаться от события, что бы это ни было.