Очистити маркери з Google Map в Android


83

Я додав карту щодо активності фрагментів і додав кілька маркерів за допомогою функції addMarker, але я можу видалити всі маркери, я отримую повідомлення про інший список маркерів,

Тепер я хочу видалити всі маркери та додати новий.

один із способів зберегти всі маркери у списку та видалити по одному, (marker.remove ())

Чи є кращий спосіб очистити всі маркери.


2
існує метод clear ()
Марко Нічифорович

Відповіді:


203

Якщо ви хочете очистити "всі маркери, накладання та полілінії з карти", використовуйте clear()на своємуGoogleMap .


1
Чи слід викликати remove () на всіх з них перед цим? Я маю на увазі, якщо у мене все ще є ArrayList з цими маркерами, я припускаю, що я все ще активно посилаюся на ці маркери, тому вони залишаться в пам'яті, навіть якщо я очищу карту. Я правий у цьому, чи очищення карти стирає посилання на маркери?
Charlie-Blake

5
@ santirivera92: "Чи повинен я зателефонувати до видалення () на всіх з них перед цим?" - AFAIK, тобі цього не потрібно. "якщо у мене все ще є ArrayList з цими маркерами, я припускаю, що я все ще активно посилаюся на ці маркери, тому вони залишаться в пам'яті, навіть якщо я очищу карту" - так, але це ваш код, а не код Google . Якщо ви тримаєте Markerоб’єкти окремо від карти, вам потрібно їх відпустити. clear()видалить їх візуально .
CommonsWare

1
@ santirivera92: Так, слід. Ніщо інше не повинно триматися за них.
CommonsWare

8
Також зверніть увагу, що clear()функція не скидає Markerідентифікатори. В основному ви більше не отримаєте m0за нове Markerдодавання.
Prasad De Zoysa

2
@Prasad Чи є спосіб отримати m0 знову?
Gokhan Arik

4

Якщо ви не хочете очищати полілінії, а потрібно видалити лише маркери, виконайте наведені нижче дії.

Спочатку створіть новий маркерний масив, як показано нижче

List<Marker> AllMarkers = new ArrayList<Marker>();

Потім, коли ви додаєте маркер на картах Google, також додайте їх до Маркерного масиву (його AllMarkers у цьому прикладі)

for(int i=0;i<places.length();i++){

                LatLng location = new LatLng(Lat,Long);
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(location);
                markerOptions.title("Your title");

                 Marker mLocationMarker = Map.addMarker(markerOptions); // add the marker to Map
                    AllMarkers.add(mLocationMarker); // add the marker to array

                }

потім нарешті зателефонуйте наведеному нижче методу, щоб видалити всі маркери одночасно

 private void removeAllMarkers() {
        for (Marker mLocationMarker: AllMarkers) {
            mLocationMarker.remove();
        }
        AllMarkers.clear();

    }

дзвінок з будь-якого місця, щоб видалити всі маркери

removeAllMarkers();

Я знайшов це рішення, коли шукав спосіб видалити лише маркери карти, не очищаючи полілінії. Сподіваюся, це допоможе і вам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.