我已经通过不同的子 Activity 实现了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等替换选项卡中的 Activity ,就像许多教程中所显示的那样。
但是我的问题是,当我要检查挥动手势时,我的poseDetector.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之外启动这些 Activity (有四个基本 Activity ,有时我会切换到其他 Activity )时,此代码(以及击退检测)工作得很好。作为启动器 Activity 。但是我无法使其在TabActivity中工作。我已经尝试过将GestureDetector附加到TabActivity,但是它不起作用。我试图将GestureDetector附加到特定的 View (例如某些布局 View 或按钮,ViewFlippers等),但这是行不通的。
在调试时,我可以看到触摸事件已触发并且已注册了 Action ,但是并没有将其评估为猛击或任何其他手势。
所以我的问题是,在Android中使用带有Tabs的GestureDetectors是否有任何限制?就像我说的那样,这些手势已在TabActivity外部完美注册。
我将不胜感激知道答案的人的帮助。
如果有限制,那么有人如何解决该问题?
预先感谢您的回答。
最佳答案
看看here提到的答案。他几乎完成了与您相同的操作,但是如果您查看评分最高的答案的第一条评论,则Cdsboy会通过实现OnDown并返回true来使其正常工作。我不确定为什么需要这样做,但是它对我有用。
关于Android:GestureDetector与Tabs(TabActivity,Tabwidget)不起作用(gestureDetector.onTouchEvent(event)始终为false),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4394025/