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() всякий раз, когда необходимо загрузить новые результаты.

Может кто-нибудь указать, что я делаю неправильно здесь.


person Sree    schedule 03.04.2013    source источник


Ответы (1)


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

Brandon Donnelson, 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);
}
person airtech    schedule 29.07.2013