我是gwt
的新用户,我有一个包含gwt map
小部件和标记位置的页面。首次加载页面时,将显示标记标注,其中只有一个X表示错误。
当我关闭标注并重新打开它时,会显示正确的数据。
这是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;
首次加载页面时,我需要做些什么才能使其正常显示?
答案 0 :(得分:1)
MapWidget.open
对象完成渲染后运行GoogleMap
。要在GoogleMap
对象完成时调用它,您需要使用scheduleDeferred
和addIdleListenerOnce
,可选地,但最好是在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。