未调用OsmDroidBonusPack OnMarkerClickListener

时间:2016-02-25 05:41:18

标签: android openstreetmap osmdroid

我对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中,但它仍然无法正常工作。

1 个答案:

答案 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);