页面首次加载时,GWT地图标记标注显示为空白

时间:2013-12-04 19:27:02

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

我是gwt的新用户,我有一个包含gwt map小部件和标记位置的页面。首次加载页面时,将显示标记标注,其中只有一个X表示错误。

enter image description here

当我关闭标注并重新打开它时,会显示正确的数据。

enter image description here

这是gwt代码:

LatLng location = new LatLng(39.565537, -79.426603);


// Init the map options
final MapOptions options = new MapOptions();
// Zoom level. Required
options.setZoom(12);
options.setCenter(location);
// Map type. Required.
options.setMapTypeId(new MapTypeId().getRoadmap());

// Enable maps drag feature. Disabled by default.
options.setDraggable(true);
// Enable and add default navigation control. Disabled by default.
options.setNavigationControl(true);
// Enable and add map type control. Disabled by default.
options.setMapTypeControl(true);

// Create map with options & set as control
final MapWidget retval = new MapWidget(options);

marker.setPosition(location);
marker.setMap(retval.getMap());

String html = "<br />Y Device location at " + loc.updateTime;
if (loc.dmTime != null) {
    html += "<br />Y Received at " + loc.dmTime;
}

infoWindow.setContent(html);
infoWindow.setPosition(location);

infoWindow.open(retval.getMap(), marker);

marker.setTitle("Whatever");

Event.addListener(marker, "click", new EventCallback() {
    @Override
    public void callback() {
        infoWindow.open(retval.getMap(), marker);
    }
});

return retval;

首次加载页面时,我需要做些什么才能使其正常显示?

2 个答案:

答案 0 :(得分:1)

MapWidget.open对象完成渲染后运行GoogleMap。要在GoogleMap对象完成时调用它,您需要使用scheduleDeferredaddIdleListenerOnce,可选地,但最好是在onLoad内:

GoogleMap retval;

@Override
protected void onLoad() {
    ...
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {                
        @Override
        public void execute() {
            retval.addIdleListenerOnce(new IdleHandler() {
                @Override
                public void handle() {
                    infoWindow.setContent(html);
                    infoWindow.setPosition(location);
                    infoWindow.open(retval.getMap(), marker);
                }
            });
        }
    });
}

答案 1 :(得分:0)

retval是您的MapWidget,并在您的函数结束时返回,因此我认为您稍后会在代码中执行setWidget。然后在显示MapWidget之前完成infoWindow.open ... 也许你可以试试:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {                
   @Override
   public void execute() {
       infoWindow.open(retval.getMap(), marker);
   }
});

在显示地图后显示InfoWindow。