我对OsmBonusPack中的OnMarkerClickListener有一个奇怪的问题。如果我在OnCreate中添加标记,则不会在单击时调用侦听器。但是,如果我在所有初始设置后添加标记,请说当用户与应用程序交互时,单击标记时将调用OnMarkerClickListener。
为了说明,此代码添加的OnMarkerClickListener不会响应:
@Override public void onCreate(Bundle savedInstanceState) {
MapView mapView = (MapView) findViewById(R.id.map);
mapView.setTileSource(TileSourceFactory.MAPNIK);
Marker marker = new Marker(mapView);
marker.setPosition(new GeoPoint(latitude, longitude));
marker.setOnMarkerClickListener(MyOnMarkerClickListener);
mapView.getOverlays().add(marker);
mapView.invalidate();
}
此代码添加的OnMarkerClickListener将响应(我甚至使用相同的标记和mapView引用):
public void markerAddedbyUser() {
mapView.getOverlays().add(marker);
mapView.invalidate();
}
我想知道在完全绘制UI之前,它是否与mapView.getOverlays()方法无关。但是,我试图将第一个代码放在onCreateOptionMenu中,但它仍然无法正常工作。
答案 0 :(得分:2)
发布此问题后不久,我找到了解决方案。我使用:
列出了MapView.getOverlays()中的所有对象List<Overlay> overlays = mapView.getOverlays();
for(Overlay overlay : overlays) {
System.out.println(overlay.getClass());
}
我发现我在其他地方添加了MapEventsOverlay,并且叠加层位于所有叠加层的顶部(列表的最后一项)。 MapEventsOverlay避免OnMarkerClickListeners监听点击事件。我通过将MapEventsOverlay添加到列表的第一个来解决了这个问题:
mapView.getOverlays().add(0, mMapEventsOverlay);