Issue on removing item from clustermanager

前端 未结 5 468
鱼传尺愫
鱼传尺愫 2020-12-16 01:44

In my Android application, I have to delete and re-add a cluster item in my GoogleMap, that represents my current location. But when I run this code:

cluster         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-16 02:11

    As @SergePopulov said, NonHierarchicalDistanceBasedAlgorithm does not implement removing elements. For those who dont want to use GridBasedAlgoritm but still needs to remove single elements from NonHierarchicalDistanceBasedAlgorithm there is another solution.

    Using this link (Source) you can find source code for the NonHierarchicalDistanceBasedAlgorithm provided by developers in github.

    What I did is just save the old Cluster items, clear the clusterManager and add the old items again but do not add the one that is passed through the method.

    Firstly create a separate class and paste NonHierarchicalDstanceBasedAlgorithm class code.

    public class CustomNonHierarchicalDistanceBasedAlgorithm implements Algorithm
    {
        //copy code here
    }
    

    After that find method removeItem and replace it with this code:

    @Override
    public void removeItem(MarkerItem item)
    {
        final Collection> items = new ArrayList>();
        final PointQuadTree> quadTree = new PointQuadTree>(0, 1, 0, 1);
    
        for (QuadItem temp : mItems)
        {
            if (item.getPosition() != temp.getPosition())
            {
                synchronized (quadTree)
                {
                    items.add(temp);
                    quadTree.add(temp);
                }
            }
        }
    
        clearItems();
    
        for (QuadItem temp : items)
        {
            synchronized (mQuadTree)
            {
                mItems.add(temp);
                mQuadTree.add(temp);
            }
        }
    }
    

    After that go where your ClusterManager is created and paste code below containing your class name:

    clusterManager.setAlgorithm(new CustomNonHierarchicalDistanceBasedAlgorithm());
    

    Where your MarkerItem is your class which implemented ClusterItem. And it should now work.

    Don't forget to recluster your ClusterManager after you remove the item by running:

    clusterManager.cluster();
    

提交回复
热议问题