OsmDroidBonusPack OnMarkerClickListener 未调用

OsmDroidBonusPack OnMarkerClickListener not called

我对 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();
}

我在想是不是和mapView.getOverlays()方法在UI画完之前还没有完全准备好有关。但是,我尝试将第一个代码放在 onCreateOptionMenu 中,但它仍然不起作用。

在我发布这个问题后不久,我找到了解决方案。我使用

列出了 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);