我对onTap方法以及它们如何使用ItemizedOverlay感到有点困惑。我希望用户点击地图,然后在他们点击的位置放置一个OverlayItem(图标)。然后我希望他们再次点击OverlayItem以确认位置。
我可以通过覆盖
将OverlayItem添加到地图中没有问题public boolean onTap(GeoPoint p, MapView mapView)
但是我想通过覆盖
捕获用户点击该项目protected boolean onTap(int i)
麻烦的是,当我覆盖这两种方法的两种方法时,当我点击我的图标项时,第二种方法永远不会被执行。
我已经按照所有的例子,但我仍然被卡住了。有人可以告诉我,我做错了吗?
由于
答案 0 :(得分:1)
感谢您的回复。 super.onTap似乎是我失踪的东西。这些是我的方法,所以你看到onTap的'GeoPoint'版本是主要入口点,它可以工作!我发布的链接也非常有用。
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
// If it was the parent that was tapped, do nothing
if(super.onTap(p, mapView)) {
return true;
}
else {
lastClickedLocation = p;
mapView.getController().animateTo(lastClickedLocation);
if(markerItem == null) {
markerItem = new OverlayItem(lastClickedLocation, "", "");
items.add(markerItem);
}
else {
items.remove(markerItem);
markerItem = new OverlayItem(lastClickedLocation, "", "");
items.add(markerItem);
}
Utils.alert(parent.getApplicationContext(), parent.getResources().getString(R.string.tapAgainToConfirm));
populate();
return true;
}
}
/**
* Override the onTap(index) method
*/
@Override
protected boolean onTap(int i) {
parent.confirmLocation(items.get(i));
return true;
}
答案 1 :(得分:0)
我没试过这个,但我认为它会起作用:
尝试从GeoPoint
- 风格的onTap()
链接到超类。这应该为您提供调用索引风格onTap()
的默认处理。覆盖该方法以找出用户何时点击现有标记并返回true
以指示您处理该事件。返回GeoPoint
- 风格onTap()
,如果super.onTap()
返回true
,则表示该事件由某人(例如您)处理。因此,如果是false
,请在提供的GeoPoint
添加标记。