2015-10-01 10 views
8

Używam narzędzia do grupowania Androida na mapie i pomyślnie zaimplementowałem detektor onclick z mClusterManager.setOnClusterItemClickListener() dla wszystkich znaczników obsługiwanych przez bibliotekę klastrowania.Klastry z Androidem i kliknięcia znaczników

Ponieważ chcę również, aby niektóre znaczniki zawsze były bezklastrowe, dodałem też niektóre znaczniki bez użycia mClusterManager, ale bezpośrednio używając mapy mMap.addMarker(), w ten sposób jestem pewien, że nie są one zgrupowane na mapie.

Moim problemem jest to, że nie mogę przechwytywać kliknięć tych znaczników (zawsze bezklejowych), ponieważ użyłem już mMap.setOnMarkerClickListener (mClusterManager) do obsługi klikniętych znaczników klastrów.

Czy istnieje sposób na odsłuchanie klikniętych znaczników klastrowych ORAZ klikniętych znaczników nie obsługiwanych przez bibliotekę klastrowania?

Czy istnieje sposób na określenie menedżera klastra, aby nigdy nie grupował niektórych znaczników? W takim przypadku nie będę musiał obsługiwać tego innego odbiornika kliknięć, ponieważ wszystkie znaczniki będą wyświetlane za pomocą narzędzia do grupowania.

Dziękuję

Odpowiedz

14

Można utworzyć nowy MarkerManager które przechodzą do konstruktora ClusterManager. Następnie utwórz nową kolekcję Markerów, używając MarkerManager#newCollection i dodaj swoje normalne znaczniki do mapy, używając metody MarkerManager.Collection#addMarker.

Następnie, zamiast dzwonić pod numer mMap.setOnMarkerClickListener(mClusterManager), należy zadzwonić pod numer mMap.setOnMarkerClickListener(mMarkerManager) i zajmie się przekazywaniem zdarzeń kliknięcia Marker do odpowiednich odbiorców. Konieczne będzie także skonfigurowanie detektora onMarkerClick dla normalnych znaczników za pomocą funkcji MarkerManager.Collection#setOnMarkerClickListener(GoogleMap.OnMarkerClickListener markerClickListener).

Polecam przejrzenie źródła klas MarkerManager i ClusterManager, aby uzyskać lepszy obraz interakcji klas.

+3

Idealne to działa, thx. Czytanie linka do MarkerManager naprawdę mi pomogło, jest to dobre zalecenie. –

5

Kolejnym sposobem na otrzymanie zdarzenia click dla Marker jest użycie interfejsu OnClusterItemClickListener.

połączeń mClusterManager.setOnClusterItemClickListener(this); i dokonać klasa wdrożenia OnClusterItemClickListener

Następnie wewnątrz metody onClusterItemClick, dostaniesz ClusterItem który jest markerem, który został kliknięty,

@Override 
public boolean onClusterItemClick(ClusterItem clusterItem) { 

    Toast.makeText(getActivity(), "Latitude " + clusterItem.getPosition().latitude, Toast.LENGTH_LONG).show(); 

    return true; 
} 
+1

To jest łatwiejsze. – dan

+1

Ale nie ma dalszych atrybutów, jeśli masz klasę rozszerzoną z 'ClusterItem'. Na przykład 'Ikona',' Id', .... –

+0

@ Mr.Hyde może możesz oszukać system, jeśli masz bazę danych, Lat i Lng się nie zmienią i możesz odwrócić dane. Wdałbym to w moim projekcie. Dzięki @Atul! –

Powiązane problemy