因此,每当用户点击屏幕上的任何其他位置时,只要用户点击覆盖项目和对话框,我就会想要记录消息。我在网上看到,最好的方法是调用super(onTap(GeoPoint,Mapview))。如果它返回true我将记录,否则显示对话框。但是我检查了超级调用的输出,无论用户点击的位置如何,它都会返回false。任何人都可以解释为什么或可能的解决方案?
答案 0 :(得分:1)
你还必须在叠加层中处理onTap(并在那里返回true)。我不认为任何覆盖处理它自己的onTap - 你必须从基类派生并覆盖覆盖本身的onTap()方法。他们中的一些人做了一些计算,看看你的位置,但他们没有处理它。
例如,如果您从ItemizedOverlay派生,那么您应该在子类中覆盖另一个方法:
@Override
protected boolean onTap(final int index) {
Log.d(...);
return true;
}
ItemizedOverlay已经计算了您点击的位置,如果您在其中一个项目中点击,则会使用项目索引来调用新的onTap(int)方法。如果从此方法返回true,则在调用super()时onTap(GeoPoint,MapView)将为true。
@Override
protected boolean onTap(GeoPoint p, MapView m) {
if (!super.onTap(p,m)) {
// show dialog here ....
}
}