Marker marker = mMap.addMarker(markerOptions); marker.setTag(poi.getKey()); marker.hideInfoWindow(); builder.include(marker.getPosition()); Este código funciona correctamente porque puse como manuel. Hice todo marker.tag() . Usé la clave hash para recuperar cuál es mi pin.
mClusterManager.addItem() Quiero usar este método. Pero también quiero tomar la etiqueta del marcador. Así que no quiero agregar al mapa como Marker marker = mMap.addMarker(markerOptions);
¿Como puedó resolver esté problema?
Quiero explicar más detalladamente.
public class PoiItem implements ClusterItem{ private final LatLng mPosition; private String mTitle; private String mSnippet; private String tag; private ResponsePoi pois; public PoiItem(ResponsePoi poi,double lat, double lng,String tag) { mPosition = new LatLng(lat, lng); pois = poi; mTitle = poi.getName(); mSnippet = poi.getAddress(); this.tag = tag; } private void setMyCluster(){ mClusterManager = new ClusterManager<PoiItem> (MainActivity.this,mMap); mMap.setOnCameraIdleListener(mClusterManager); mMap.setOnMarkerClickListener(mClusterManager); } setMyCluster(); for(HashMap.Entry<String, ResponsePoi> poi : pois.entrySet()) { MarkerOptions markerOptions = new MarkerOptions() .snippet(poi.getValue().getAddress()) .title(poi.getValue().getName()) .position(new LatLng(poi.getValue().getLocation().getL().get(0),poi.getValue().getLocation().getL().get(1))) .icon(BitmapDescriptorFactory.fromBitmap(smallMarker)); /* Marker marker = mMap.addMarker(markerOptions); marker.setTag(poi.getKey()); marker.hideInfoWindow(); builder.include(marker.getPosition()); */ mClusterManager.addItem(new PoiItem(poi.getValue(),poi.getValue().getLocation().getL().get(0),poi.getValue().getLocation().getL().get(1),poi.getKey())); }Simplemente puede agregar un campo de etiqueta de marcador a su clase personalizada MyItem .
Por ejemplo:
public class MyItem implements ClusterItem { private final LatLng mPosition; private final String mTitle; private final String mSnippet; private final String mTag; // <- This is the tag public MyItem(double lat, double lng, String t, String s, String tg) { mPosition = new LatLng(lat, lng); mTitle = t; mSnippet = s; mTag = tg; } @Override public LatLng getPosition() { return mPosition; } public String getTitle(){ return mTitle; } public String getSnippet(){ return mSnippet; } public String getTag(){ return mTag; } } Luego asigne la etiqueta al constructor MyItem cuando use el método addItem() :
MyItem item = new MyItem(lat, lng, "title", "snippet", poi.getKey()); mClusterManager.addItem(item);Asegúrese de que el administrador del clúster maneje los eventos de clic para los elementos del clúster:
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener); mMap.setOnMarkerClickListener(mClusterManager); Luego defina su ClusterManager.OnClusterItemClickListener , donde puede acceder a la etiqueta cuando se hace clic en el elemento del clúster (Marcador):
public ClusterManager.OnClusterItemClickListener<MyItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<MyItem>() { @Override public boolean onClusterItemClick(MyItem item) { if (item.getTag().equals("SomeValue")) { //Do something! } return true; } };