【发布时间】:2011-06-25 12:07:17
【问题描述】:
因此,我想在用户单击覆盖项目时记录一条消息,并在用户单击屏幕上的其他任何位置时记录一个对话框。我在网上读到最好的方法是调用 super(onTap (GeoPoint, Mapview)).如果它返回 true,我会记录,否则显示对话框。但是,我检查了 super 调用的输出,无论用户单击何处,它似乎都返回 false。谁能解释原因或可能的解决方案?
【问题讨论】:
因此,我想在用户单击覆盖项目时记录一条消息,并在用户单击屏幕上的其他任何位置时记录一个对话框。我在网上读到最好的方法是调用 super(onTap (GeoPoint, Mapview)).如果它返回 true,我会记录,否则显示对话框。但是,我检查了 super 调用的输出,无论用户单击何处,它似乎都返回 false。谁能解释原因或可能的解决方案?
【问题讨论】:
您还必须在叠加层本身中处理 onTap(并在那里返回 true)。我不认为任何覆盖处理它自己的 onTap - 您必须从基类派生并覆盖覆盖本身的 onTap() 方法。他们中的一些人会进行一些计算以查看您点击的位置,但他们不处理它。
例如,如果您从 ItemizedOverlay 派生,您将获得一个应在子类中覆盖的附加方法:
@Override
protected boolean onTap(final int index) {
Log.d(...);
return true;
}
ItemizedOverlay 已经计算了您点击的位置,如果您在其中一个项目内点击,新的 onTap(int) 方法将使用被点击的项目的索引调用。如果您从此方法返回 true,则 onTap(GeoPoint, MapView) 将在调用 super() 时为 true..
@Override
protected boolean onTap(GeoPoint p, MapView m) {
if (!super.onTap(p,m)) {
// show dialog here ....
}
}
【讨论】: