【问题标题】:GoogleMap and getMapAsyncGoogleMap 和 getMapAsync
【发布时间】:2015-09-29 23:03:24
【问题描述】:

我正在尝试找到一种在我的代码中正确实现getMapAsync() 的方法,我将不得不与谷歌Marker 打交道。您可能知道getMapAsync()onMapReady 中准备好时返回一个非空映射。

所以基本上我将不得不对onMapReady 中的标记做所有事情。问题是,在我的代码的各个部分中,我用map.addMarker(new MarkerOptions()) 调用我在onMapReady 中初始化的谷歌标记,但我不知道这些标记是否已经初始化(我可以在@987654329 中添加boolean @ 知道我的 Marker 是否在哪里初始化,但如果这个布尔值是 false 我该怎么办?对我的标记什么都不做?)。

所以基本上我希望能够获得与同步getMap() 方法相同的行为但是我肯定会获得非空映射。因为我很确定我不能在我的主线程上添加“服务员”(例如CountdownLatch),所以我找不到等待地图准备好的方法,然后再继续执行其余代码我的主线。谢谢

【问题讨论】:

  • 明显的解决方案从两个地方调用“添加代码”(创建标记和onMapReady)......在“添加代码”中检查地图是否准备好,如果没有,将标记存储在一些标记变量列表中(字段)...如果地图准备好添加标记并从列表中添加所有标记,清除列表...当然添加一些线程竞赛检查
  • if not, store marker in some list of markers variable(field) 使用map.addMarker(new MarkerOptions()) 检索标记实例,如果我想拥有Marker 实例,则需要初始化map
  • 嗯,好的,好的……所以存储 MarkerOptions 列表或创建它们所需的其他数据……但是你明白了吗?您需要诸如待定标记(或用于创建它们的数据)之类的东西来添加...
  • 我就是这么做的。但想象一下我这样做:myMarkerOption.icon(xx) 在我的MarkerOption 实例上,我认为它不会自动触发到地图上适当的Marker(无论它是否已初始化),是吗?
  • MarkerOption 存储在 var 中对我来说是不可行的,因为使用它的设置器不会反映 Marker 上的更改

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


【解决方案1】:

解决方案确实如@Selvin 所述,操作和存储MarkerOptions 变量。为了将MarkerOptions 变量的变化反映到我的地图中,我创建了如下方法:

public void reloadMarkersOnTheMap() {
    if (isMapInitialised) {
        map.clear();
        map.addMarker(pickupMarker);
        map.addMarker(dropOffMarker);
    }
}

然后解决方案是使用我的MarkerOptions 变量的修改值清除并重新添加我的Marker 从/到GoogleMap。如果isMapInitialised == false,那么我的标记将使用onMapReady() 中的最新修改进行初始化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多