Android: GestureDetector не работает (gestureDetector.onTouchEvent (событие) всегда ложно) с вкладками (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.

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

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

10
задан einschnaehkeee 9 December 2010 в 01:23
поделиться