Удалить маркеры с карты Google в Android

83

Я добавил карту активности фрагмента и добавил несколько маркеров с помощью функции addMarker, но я могу удалить все маркеры, я получаю уведомление для другого списка маркеров,

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

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

Есть ли лучший способ очистить все маркеры.

Ашиш Касма
источник
2
есть метод clear ()
Марко Никифорович

Ответы:

203

Если вы хотите удалить с карты «все маркеры, наложения и полилинии», используйте clear()на своемGoogleMap .

CommonsWare
источник
1
Должен ли я вызвать remove () для всех перед этим? Я имею в виду, что если у меня все еще есть список ArrayList с этими маркерами, я полагаю, что у меня все еще есть активная ссылка на эти маркеры, поэтому они останутся в памяти, даже если я очищу карту. Я прав насчет этого или очистка карты стирает ссылки на маркеры?
Чарли-Блейк
5
@ santirivera92: "Должен ли я вызвать remove () для всех, прежде чем делать это?" - AFAIK, вам не нужно. «если у меня все еще есть список ArrayList с этими маркерами, я полагаю, что у меня все еще есть активная ссылка на эти маркеры, поэтому они останутся в памяти, даже если я очищу карту» - да, но это ваш код, а не код Google . Если вы держитесь за Markerобъекты отдельно от карты, вам нужно отпустить их. clear()удалит их визуально .
CommonsWare
1
@ santirivera92: Да, должно. Больше ничего не должно за них держаться.
CommonsWare
8
Также обратите внимание, что clear()функция не сбрасывает Markerидентификаторы. В основном вы не получите m0снова для нового Markerдобавления.
Прасад Де Зойса
2
@Prasad Есть ли способ снова получить m0?
Гохан Арик
4

Если вы не хотите очищать полилинии и нужно удалить только маркеры, выполните следующие действия.

Сначала создайте новый массив маркеров, как показано ниже

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

Затем, когда вы добавляете маркер на карты Google, также добавляйте их в массив маркеров (его все маркеры в этом примере)

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();

Я нашел это решение, когда искал способ удалить только маркеры карты без очистки полилиний. Надеюсь, это тебе тоже поможет.

ФРЭНСИС ФЕРНАНДО
источник