使用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));
我没有使用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));