【问题标题】:How to exchange (remove and add) markers in Android GoogleMaps v2 while maintaining their click-ability如何在 Android GoogleMaps v2 中交换(删除和添加)标记,同时保持其可点击性
【发布时间】:2013-04-07 01:18:51
【问题描述】:

当用户触摸一个标记时,我出于某种原因想要交换那个标记(通过使用另一个图形)。不幸的是,当我安装以下(实验性)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;
}

观察:

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

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

【问题讨论】:

标签: android google-maps-markers google-maps-android-api-2


【解决方案1】:

从 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多