每当数据更新时如何调用Marker的ShowInfoWindow()

时间:2019-01-07 08:10:18

标签: android google-maps-android-api-2 markerclusterer android-maps-utils

在我的项目中,我正在使用Google Map V2和Map Utils对来自该库https://github.com/googlemaps/android-maps-utils的地图进行聚类。我在项目上使用了STOMP,每当收到新数据时,我都需要更新标记,并且通过从集群管理器中删除所有标记并重新添加它们来完成此操作。但是现在我的问题是,每当用户单击标记时,都会向用户显示标记的InfoWindow,然后,如果接收到新数据,则由于调用mClusterManager.cluster(),将关闭InfoWindow。功能。现在,我的问题是刷新集群后如何显示InfoWindow。

下面是我的代码:

 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(默认))

如果任何人都可以回答我之前的问题,我会很高兴,因为我希望它做的更好,只需更新单个项目即可。参见此处:Update single item GoolgeMap Cluster

1 个答案:

答案 0 :(得分: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();

希望这可以为您提供帮助。