2

Is there a way to exclude one selected marker from the clustering?

this is my renderer class

private class StoreRenderer extends DefaultClusterRenderer<Store> {
    HashMap<Store, Marker> storeMarkerMap = new HashMap<Store, Marker>();
    public StoreRenderer(Context context, GoogleMap map, ClusterManager<Store> clusterManager) {
        super(context, map, clusterManager);
    }

    public Marker getMarkerFromStore(Store clusterItem) {
        return storeMarkerMap.get(clusterItem);
    }

    public void removeMarkerFromStore(Store itemToRemove) {
        storeMarkerMap.remove(itemToRemove);
    }


    @Override
    protected void onBeforeClusterItemRendered(Store item, MarkerOptions markerOptions) {
        super.onBeforeClusterItemRendered(item, markerOptions);
        markerOptions.icon(BitmapDescriptorFactory.fromResource(item.getMainCategoryResourceImage()));
    }

    @Override
    protected void onClusterItemRendered(Store clusterItem, Marker marker) {
        super.onClusterItemRendered(clusterItem, marker);
        storeMarkerMap.put(clusterItem, marker);
    }
    @Override
    protected boolean shouldRenderAsCluster(Cluster cluster) {
        return cluster.getSize() > 3;
    }

    public HashMap<Store, Marker> getStoreMarkerMap() {
        return storeMarkerMap;
    }
}

and i'm adding all the stores like this

ClusterManager<Store> mClusterManager = new ClusterManager<Store>(getContext(), map);
StoreRenderer renderer = new StoreRenderer(getContext(), my_map, mClusterManager);
mClusterManager.setRenderer(renderer);
.....
mClusterManager.addItem(temp);

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<Store>() {
        @Override
        public boolean onClusterItemClick(Store storeClusterItem) {
            markerClicked(storeClusterItem);
            return true;
        }
    });

how can I exclude the clicked marker from the clustering?

Has QUIT--Anony-Mousse
  • 76,138
  • 12
  • 138
  • 194
Alex Fragotsis
  • 1,248
  • 18
  • 36

2 Answers2

0

There can be a lot of workaround regarding removing an item in cluster.

  • Use GridBasedAlgorithm as it support elements remove.

In this SO question, the community provided some workaround like GridBasedAlgorithm and some own code implementation for removing a marker in cluster.

I hope this clear up some things. :)

Community
  • 1
  • 1
Mr.Rebot
  • 6,703
  • 2
  • 16
  • 91
0

Here is my solution that I used.

clusterManager = ClusterManager(requireContext(), myMap, object : MarkerManager(myMap) {
            override fun onMarkerClick(marker: Marker): Boolean {
                val result = super.onMarkerClick(marker)
                return if (result) true // cluster marker clicked
                else {
                    //other marker click handled
                    true
                }
            }
        })
    
        clusterManager?.let { clsManager ->
            clsManager.setOnClusterItemClickListener { marker ->
                //marker in cluster clicked
                return@setOnClusterItemClickListener true //super.onMarkerClick(marker) returned true
            }   
            myMap.setOnMarkerClickListener(clsManager)
        }
DuosDuo
  • 153
  • 1
  • 10