Вывод маркера карты GWT отображается пустым при первой загрузке страницы

Я новичок в 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 = "Y Device location at " + loc.updateTime;
if (loc.dmTime != null) {
 html += "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 ответа

Запустите MapWidget.open когда объект GoogleMap MapWidget.open рендеринг. Для того, чтобы позвонить, когда 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);
 }
 });
 }
 });
}


retval - это ваш MapWidget и возвращается в конце вашей функции, поэтому я думаю, что вы выполните setWidget позже в своем коде. Затем infoWindow.open выполняется до отображения MapWidget... Возможно, вы можете попробовать:

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

для отображения InfoWindow после отображения карты.

licensed under cc by-sa 3.0 with attribution.