0

当用户触摸标记时,我出于某种原因想要交换该标记(通过使用另一个图形)。不幸的是,当我安装以下(实验性)onMarkerClick处理程序时,Android GoogleMaps v2 确实出现了一种奇怪的行为:

@Override
public boolean onMarkerClick(final Marker marker) {
    LatLng p = marker.getPosition();
    marker.remove();
    Marker m = mMap.addMarker(new MarkerOptions().position(p).title("new"));
    m.showInfoWindow();
    return true;
}

观察:

  • 第一次单击(在“原始”标记上)调用事件处理程序,交换标记并正确显示信息窗口
  • 第二次点击(在“新”标记上)既不触发onMapClick也不触发onMarkerClick。此外,信息窗口消失(意外行为)
  • 由于对同一标记的所有后续单击都不会触发任何事件处理程序,因此信息窗口将保持隐藏状态,直到用户触摸地图上的空闲空间然后再次触摸该标记。同样,标记被交换并出现信息窗口,但所有对标记的连续点击都将被忽略,如前所述。

有人可以确认这种行为吗?我确实认为它是一个错误。有什么解决方法吗?

4

1 回答 1

0

从 gmaps-api-issues 复制的解决方法:

@Override
public boolean onMarkerClick(final Marker marker) {
    LatLng p = marker.getPosition();
    marker.remove();
    final Marker m = mMap.addMarker(new MarkerOptions().position(p).title("new"));
    handler.post(new Runnable() {
        @Override
        public void run() {
            m.showInfoWindow();
        }
    });
    return true;
}

其中处理程序定义为:

private Handler handler = new Handler();

于 2013-04-06T17:18:51.653 回答