GWT Google Map Api V3 - 更改时损坏

时间:2013-04-03 22:43:47

标签: gwt google-maps-api-3 gwt-2.5

第一次呈现它对我来说很好。 但是,如果我在地图上更改任何内容或重新创建它,它就会破碎。

以下是屏幕截图。 Here

这是我更改每页结果值后的屏幕截图。 Here

这是我的代码。

@UiField DivElement mapPanel;

private GoogleMap googleMap;

public void loadAllMarkers(final List<LatLng> markers)
{
    if(!markers.isEmpty())
    {
        final MapOptions options = MapOptions.create();
        options.setMapTypeId(MapTypeId.ROADMAP);

        googleMap = GoogleMap.create(mapPanel, options);

        final LatLngBounds latLngBounds = LatLngBounds.create();

        for(LatLng latLng : markers)
        {
        final MarkerOptions markerOptions = MarkerOptions.create();

        markerOptions.setPosition(latLng);
        markerOptions.setMap(googleMap);

        final Marker marker = Marker.create(markerOptions);
        latLngBounds.extend(marker.getPosition());

        }

        googleMap.setCenter(latLngBounds.getCenter());
        googleMap.fitBounds(latLngBounds);

    }
}

每当需要加载新结果时,我都会调用loadAllMarkers()方法。

有人可以指出我在这里做错了什么。

1 个答案:

答案 0 :(得分:2)

这似乎来自以下(我从Google+社区中提取 - GWT Maps V3 API):

  

Brandon DonnelsonMar 5,2013

     

我已经发生这种情况并忘记了原因,但是   mapwidget.triggerResize()将重置磁贴。这似乎发生了   当onAttach发生时,动画存在意味着div   开始变小并增加侧面,但地图已经   连接。在动画结束时,地图不会自动调整大小。   我的意思是调查自动调整大小,但我没有时间   攻击它。

在您的情况下,您将在完成更改后调用googleMap.triggerResize()。当我遇到完全相同的问题时,这解决了我的问题。我知道这有点晚了,但我希望它有所帮助!

另一个答案是使用以下内容扩展Map小部件:

   @Override
protected void onAttach() {
    super.onAttach();
    Timer timer = new Timer() {

        @Override
        public void run() {
            resize();
        }
    };
    timer.schedule(5);
}

/*
 * This method is called to fix the Map loading issue when opening
 * multiple instances of maps in different tabs
 * Triggers a resize event to be consumed by google api in order to resize view
 * after attach.
 *
 */
public void resize() {
    LatLng center = this.getCenter();
    MapHandlerRegistration.trigger(this, MapEventType.RESIZE);        
    this.setCenter(center);
}