使用ClusterManager时如何获取每个Marker的objectID

How to get each Marker objectID when using ClusterManager

我没有使用ClusterManager,而是使用HashMap将Marker和ID放入HashMap,在OnMarkClick方法中获取ID,从数据库中获取数据。有效

markers.put(addNewMarker(geoPoint), objectId);

private Marker addNewMarker(ParseGeoPoint parseGeoPoint) {
    double latitude = parseGeoPoint.getLatitude();
    double longitude = parseGeoPoint.getLongitude();
    return googleMap.addMarker(new MarkerOptions().position(
            new LatLng(latitude, longitude)));
}

@Override
public boolean onMarkerClick(Marker marker) {
    String objectId = markers.get(marker);
    if (null == objectId) {
        return false;
    }
    getMemoryBriefInfo(objectId);
    return true;
}

但现在我需要使用 ClusterManager 将多个标记聚类成数字。

问题是似乎没有办法实现这个,在 Google 的 demo 中,它只是将项目添加到集群中。

ClusterManager class 中有一个 OnMarkerClick 方法,但我不知道如何覆盖它并使用我自己的唯一 ID 进行设置。

有一个全局解决方案可以帮助您添加标题、摘要和图标,这样您就可以得到想要的内容。

修改您的 ClusterItem Object 并添加 3 个变量:

public class MyItem implements ClusterItem {

private final LatLng mPosition;
BitmapDescriptor icon;
String title;
String snippet;

public MyItem(BitmapDescriptor ic,Double lat , Double lng,String tit ,String sni)
{
    mPosition = new LatLng(lat,lng);
    icon = ic;
    title = tit;
    snippet = sni;

}

创建服装渲染后:

public class OwnRendring extends DefaultClusterRenderer<MyItem> {

    public OwnRendring(Context context, GoogleMap map,
                           ClusterManager<MyItem> clusterManager) {
        super(context, map, clusterManager);
    }


    protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {

        markerOptions.icon(item.getIcon());
        markerOptions.snippet(item.getSnippet());
        markerOptions.title(item.getTitle());
        super.onBeforeClusterItemRendered(item, markerOptions);
    }
}

之后只需将此行放在 SetUpCluster() 函数中的 addItems() 之前:

 mClusterManager.setRenderer(new OwnRendring(getApplicationContext(),mMap,mClusterManager));