Wie @SergePopulov sagte, implementiert NonHierarchicalDistanceBasedAlgorithm das Entfernen von Elementen nicht. Für diejenigen, die GridBasedAlgoritm nicht verwenden möchten, aber dennoch einzelne Elemente aus NonHierarchicalDistanceBasedAlgorithm entfernen müssen, gibt es eine andere Lösung.
Mit diesem Link (Source) können Sie den Quellcode für den von den Entwicklern in github bereitgestellten NonHierarchicalDistanceBasedAlgorithm finden.
Was ich getan habe, ist nur die alten Cluster-Elemente zu speichern, löschen Sie den ClusterManager und fügen Sie die alten Elemente erneut, aber fügen Sie nicht die eine, die durch die Methode übergeben wird.
Erstellen Sie zuerst eine separate Klasse und fügen Sie den Klassencode NonHierarchicalDstanceBasedAlgorithm ein.
public class CustomNonHierarchicalDistanceBasedAlgorithm<MarkerItem extends ClusterItem> implements Algorithm<MarkerItem>
{
//copy code here
}
Nach dieser Methode find removeItem und ersetzen Sie es mit diesem Code:
@Override
public void removeItem(MarkerItem item)
{
final Collection<QuadItem<MarkerItem>> items = new ArrayList<QuadItem<MarkerItem>>();
final PointQuadTree<QuadItem<MarkerItem>> quadTree = new PointQuadTree<QuadItem<MarkerItem>>(0, 1, 0, 1);
for (QuadItem<MarkerItem> temp : mItems)
{
if (item.getPosition() != temp.getPosition())
{
synchronized (quadTree)
{
items.add(temp);
quadTree.add(temp);
}
}
}
clearItems();
for (QuadItem<MarkerItem> temp : items)
{
synchronized (mQuadTree)
{
mItems.add(temp);
mQuadTree.add(temp);
}
}
}
Danach gehen, wo Ihre ClusterManager erstellt und Einfügen von Code unter Ihrem Klassennamen enthält:
clusterManager.setAlgorithm(new CustomNonHierarchicalDistanceBasedAlgorithm<MarkerItem>());
Wo ist Ihr MarkerItem Ihre Klasse, die ClusterItem implementiert hat. Und es sollte jetzt funktionieren.
Vergessen Sie nicht, Ihre ClusterManager recluster, nachdem Sie das Element entfernen, indem Sie:
clusterManager.cluster();
Dies ist eine gute Lösung, aber der Algorithmus mit 'PreCachingAlgorithmDecorator' Verpackung ist nicht notwendig, da es automatisch tut dies in der 'setAlgorithm()' Methode. –