Как вызывать ShowInfoWindow () для Marker при каждом обновлении данных Googlemap Clustering - PullRequest
0 голосов
/ 07 января 2019

В своем проекте я использую Google Map V2 и Map Utils для кластеризации карты из этой библиотеки: https://github.com/googlemaps/android-maps-utils. Я использовал STOMP в своем проекте, и всякий раз, когда я получаю новые данные, мне нужно обновить маркер, и я сделал это, удалив все маркеры из менеджера кластеров и повторно добавив их. Но теперь моя проблема заключается в том, что каждый раз, когда пользователь нажимает на маркер, пользователю показывается информационное окно маркера, и после этого, если я получаю новые данные, информационное окно закрывается из-за вызова mClusterManager.cluster (); функция. Теперь мой вопрос - как показать информационное окно после обновления кластера.

Ниже приведены мои коды:

 googleMap.setOnMarkerClickListener(mClusterManager);

        addClusterMarkers(mClusterManager);
        mClusterManager.getMarkerCollection().setOnInfoWindowAdapter(new  CustomAdapterInfoWindow());

 mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<AppClusterItem>() {
        @Override
        public boolean onClusterItemClick(AppClusterItem appClusterItem) {
            showingInfoWindowId = appClusterItem.getmId();
            return false;
        }
    });
    googleMap.setOnMarkerClickListener(mClusterManager);


  //New Data Update
 on NewDataReceived(String _id){
  mClusterManager.clearItems();
                            addClusterMarkers(mClusterManager);
                            mClusterManager.cluster();
                            try {
                                Log.d(Constants.TAG, appClusterItemList.size() + "Showing Info Window" + activeDataKey.get(_id));
                                render.getMarker(appClusterItem[0]).showInfoWindow();
                            } catch (Exception e) {
                                Log.d(Constants.TAG, "" + e);
                            }
                            mClusterManager.cluster();
                        }
                    });

}

Я хочу показать ShowInfoWindow () после получения данных, если пользователь еще раз не щелкнет маркер. (Повторное нажатие на маркер скроет showInfoWindow (по умолчанию))

Если кто-нибудь может ответить на мой предыдущий вопрос, я был бы счастлив, потому что я хочу, чтобы он работал лучше, просто обновляя отдельный элемент. см. здесь: Обновление отдельного элемента кластера GoolgeMap

1 Ответ

0 голосов
/ 07 января 2019

Я делаю это в своем приложении, когда хочу обновить один маркер, поэтому я не уверен, что это может быть полезно для вас, поскольку кажется, что вы вызываете совершенно новый набор clusterItems.

В моем классе есть следующие поля:

//declaring a clicked item
private PropertyModel clickedPropertyModelClusterItem;

private Marker clickedMarker;

Когда я нажимаю на infoWindow, этот метод вызывается:

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<PropertyModel>(){
        @Override
        public boolean onClusterItemClick(PropertyModel propertyModelItem){
            clickedPropertyModelClusterItem = propertyModelItem;
            return false;
        }
    });

В моем методе getInfoContents я назначаю маркер в параметре для созданного поля, чтобы отслеживать его:

@Override
    public View getInfoContents(final Marker marker) {

    clickedMarker = marker;

    //set the values of InfoWindows as usual

}

Теперь вместо вызова mClusterManager.clearItems () я обновляю свой clickedPropertyModelClusterItem:

clickedPropertyModelClusterItem.setTitle(propertyModel.getTitle());

Наконец, я вызываю метод showInfoWindow для маркера:

//update the InfoWindow
clickedMarker.showInfoWindow();

Надеюсь, это поможет вам.

...