第一次呈现它对我来说很好。 但是,如果我在地图上更改任何内容或重新创建它,它就会破碎。
以下是屏幕截图。
这是我更改每页结果值后的屏幕截图。
这是我的代码。
@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()方法。
有人可以指出我在这里做错了什么。
答案 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);
}