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