Java中向GestureDetectorCompat传递内部类实例报错,如何解决?
解决Java中GestureDetectorCompat传递内部类实例的报错问题
你的代码报错“method call expected”的核心原因是实例化内部类时漏写了new关键字——Java创建类的实例必须通过new关键字,直接写homepageGestureListener()会被编译器误认为是调用同名方法,而非创建对象。
正确的实现方式
方式1:非静态内部类的实例化
如果homepageGestureListener是依赖外部Activity的非静态内部类(需要访问Activity的成员或方法),在Activity的onCreate方法中直接通过new关键字创建实例即可:
// 内部类声明(保持原有继承关系) class homepageGestureListener extends GestureDetector.SimpleOnGestureListener { // 重写需要的手势方法,比如滑动处理 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 编写你的滑动逻辑 return super.onFling(e1, e2, velocityX, velocityY); } } // 在onCreate中正确初始化detector @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); detector = GestureDetectorCompat(this, new homepageGestureListener()); }
方式2:静态内部类(推荐,避免内存泄漏)
如果你的手势监听器不需要访问外部Activity的成员,可以将内部类声明为static,这样既不依赖外部类实例,还能避免潜在的内存泄漏风险:
// 将内部类改为静态 static class homepageGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 编写你的滑动逻辑 return super.onFling(e1, e2, velocityX, velocityY); } } // 初始化方式与上面一致 detector = GestureDetectorCompat(this, new homepageGestureListener());
最后别忘了在Activity中重写onTouchEvent方法,将触摸事件传递给GestureDetector:
@Override public boolean onTouchEvent(MotionEvent event) { this.detector.onTouchEvent(event); return super.onTouchEvent(event); }
内容的提问来源于stack exchange,提问作者Salo
相关产品推荐
相关产品推荐

