GWT Google Map Api V3 - сломан при его изменении

Он работает нормально для меня в первый раз, когда он отображается. Но, если я что-то поменяю на карте или воссоздаю, она сломается.

Вот снимок экрана для того, как это выглядит.Вот

Вот снимок экрана после того, как я изменил результаты на значение страницы.Вот

Это мой код

@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 ответ

Кажется, это происходит из-за следующего (которое я извлек из сообщества Google+ - API GWT Maps V3):

Брэндон ДоннельсонМар 5, 2013

Я имел это случиться и забыл, почему это так, но mapwidget.triggerResize() сбросит плитки. Это, кажется, происходит, когда происходит onAttach, и существует анимация, означающая, что div начал уменьшаться и увеличивается в стороне, но карта уже прикреплена. В конце анимации, карта не изменяет размеры автоматически. Я собирался исследовать автоматическое изменение размера, но у меня еще не было времени напасть на него.

В вашем случае вы бы вызвали googleMap.triggerResize() после того, как внесете изменения. это решило мою проблему, когда у меня была точно такая же проблема. Я знаю, что уже немного поздно, но я надеюсь, что это поможет!

Другой ответ - расширить виджет "Карта" следующим образом:

   @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);
}
Другие вопросы по тегам