0

在我的项目中,我使用 Google Map V2 和 Map Utils 对来自该库的地图进行聚类:https ://github.com/googlemaps/android-maps-utils 。我在我的项目中使用了 STOMP,每当我收到新数据时,我都需要更新标记,我通过从集群管理器中删除所有标记并重新添加它们来完成它。但是现在我的问题是,每当用户单击标记时,就会向用户显示标记的 InfoWindow,然后如果我收到数据新数据,则 InfoWindow 将由于调用 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 集群

4

1 回答 1

0

当我想更新单个标记时,我会在我的应用程序中执行此操作,因此我不确定这对您是否有用,因为您似乎正在调用一组全新的 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 方法中,我将 Marker in 参数分配给创建的字段,以跟踪它:

@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();

希望这可以帮到你。

于 2019-01-07T15:03:21.870 回答