W nowym Google Maps API na Androida możemy dodać znacznik , ale nie ma sposobu, aby (łatwo) go usunąć.
Moim rozwiązaniem jest zachowanie znaczników na mapie i przerysowanie mapy, gdy chcę usunąć znacznik, ale nie jest to zbyt wydajne.
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();
private void add(String name, LatLng ll) {
final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
mMarkers.put(name, marker);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.addMarker(marker);
}
});
}
private void remove(String name) {
mMarkers.remove(name);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.clear();
for (MarkerOptions item : mMarkers.values()) {
mMap.addMarker(item);
}
}
});
}
Czy ktoś ma lepszy pomysł?
android
google-maps
Jonas
źródło
źródło
Odpowiedzi:
Podpis metody
addMarker
to:Więc kiedy dodajesz znacznik do a
GoogleMap
poprzez określenie opcji dla znacznika, powinieneś zapisaćMarker
zwrócony obiekt (zamiastMarkerOptions
obiektu, którego użyłeś do jego utworzenia). Ten obiekt umożliwia późniejszą zmianę stanu znacznika. Kiedy skończysz ze znacznikiem, możesz zadzwonić,Marker.remove()
aby usunąć go z mapy.Na marginesie, jeśli chcesz go tylko tymczasowo ukryć, możesz przełączyć widoczność znacznika, dzwoniąc
Marker.setVisible(boolean)
.źródło
Dodaj znacznik do mapy w ten sposób
Wtedy będziesz mógł użyć metody remove, usunie ona tylko ten marker
źródło
aby usunąć wszystkie bazgroły z mapy użyj
źródło
jeśli znacznik istnieje, usuń ostatni znacznik. jeśli znacznik nie istnieje, utwórz aktualny znacznik
źródło
Jeśli używasz języka Kotlin, po prostu dodaj ten kod:
Utwórz zmienne globalne
GoogleMap
iMarker
.Używam znacznika zmiennej, aby wartość znacznika zmiennej mogła się zmieniać bezpośrednio
I używam tej funkcji / metody, aby dodać znacznik na mojej mapie:
Po utworzeniu funkcji umieszczam ten kod w
onMapReady()
celu usunięcia znacznika i utworzenia nowego:To bonus, jeśli chcesz wyświetlić lokalizację adresu po kliknięciu znacznika, dodaj ten kod, aby ukryć i pokazać adres znacznika, ale potrzebujesz metody, aby uzyskać lokalizację adresu. Dostałem kod z tego postu: Jak uzyskać pełny adres z szerokości i długości geograficznej?
źródło
użyj poniższego kodu:
po kliknięciu „znacznika” można go usunąć.
źródło
Tylko WSKAZÓWKA, coś, na co straciłem godziny szukając tej nocy ...
Jeśli z jakiegoś powodu zdecydujesz się zatrzymać znacznik, po USUNIĘCIU go z mapy ... getTag zwróci NULL, nawet jeśli pozostałe wartości get powrócą z wartościami, które ustawiłeś podczas tworzenia znacznika. .
Wartość TAG jest ustawiana na NULL, jeśli kiedykolwiek usuniesz znacznik, a następnie spróbujesz się do niego odwołać.
Wydaje mi się, że to błąd ...
źródło
1. Jeśli chcesz usunąć znacznik, możesz to zrobić, ponieważ
marker.remove();
możesz również ukryć znacznik zamiast usuwać go jakoi pokazuj je później, gdy zajdzie taka potrzeba.
2. Jeśli jednak chcesz usunąć wszystkie znaczniki z mapy Użyj
map.clear();
Uwaga:
map.clear();
usunie równieżPolylines, Circles
itd.3. Jeśli nie chcesz usuwać
Polylines, Circles
itp., Użyj pętli do długości znacznika (jeśli masz wiele znaczników), aby je usunąć Sprawdź przykład tutaj LUB ustaw je jako Widoczne jako fałszywe I nie używajmap.clear();
w takim przypadku.źródło
Utwórz zmienną globalną, aby śledzić znacznik
// Usuń stary znacznik
// Dodaj zaktualizowany marker i przesuń kamerę
źródło
Utwórz tablicę ze wszystkimi znacznikami na mapie dodania.
Później użyj:
źródło
Dla tych, którzy podążają za przykładem w tym projekcie GoogleMaps - MapWithMarker , możesz usunąć znacznik, robiąc to
źródło