138 votes

Supprimer un marqueur d'une carte GoogleMap

Dans la nouvelle API Google Maps pour Android, nous pouvons ajouter un marqueur mais il n'y a aucun moyen de l'enlever (facilement).

Ma solution consiste à conserver les marqueurs dans une carte et à redessiner la carte lorsque je veux supprimer un marqueur, mais ce n'est pas très efficace.

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

Quelqu'un a-t-il une meilleure idée ?

3voto

user282172 Points 617

Juste une note, quelque chose que j'ai passé des heures à chercher ce soir...

Si vous décidez de conserver un marqueur pour une raison quelconque, après l'avoir supprimé d'une carte... getTag renverra NULL, même si les autres valeurs get renverront les valeurs que vous leur avez attribuées lors de la création du marqueur...

La valeur de TAG est mise à NULL si jamais vous supprimez un marqueur, puis tentez de le référencer.

Cela ressemble à un bug pour moi...

2voto

Hitesh Sahu Points 12561

Créez une variable globale pour garder la trace des marqueurs.

private Marker currentLocationMarker;

//Enlever l'ancienne marque

            if (null != currentLocationMarker) {
                currentLocationMarker.remove();
            }

// Ajoutez le marqueur mis à jour et déplacez la caméra.

            currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
                    new LatLng(getLatitude(), getLongitude()))
                    .title("You are now Here").visible(true)
                    .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
                    .snippet("Updated Location"));

            currentLocationMarker.showInfoWindow();

2voto

kuo chang Points 31

Utilisez le code suivant :

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
       @Override
       public boolean onMarkerClick(Marker marker) {

           marker.remove();
           return true;
       }
   });

une fois que vous aurez cliqué sur "un marqueur" vous pouvez l'enlever.

1voto

Elton da Costa Points 57

Créez un tableau avec tous les marqueurs sur la carte ajoutée.

Plus tard, utilisez :

Marker temp = markers.get(markers.size() - 1);
temp.remove();

1voto

Inzimam Tariq IT Points 3885

1. Si vous voulez enlever un marqueur, vous pouvez le faire comme suit marker.remove(); Vous pouvez également masquer le marqueur au lieu de le supprimer comme suit

 marker.setVisible(false);

et le rendre visible ultérieurement en cas de besoin.
2. Cependant, si vous voulez supprimer tous les marqueurs de la carte Utilisez map.clear();
Note : map.clear(); supprimera également Polylines, Circles etc.
3. Si vous ne voulez pas supprimer Polylines, Circles etc., puis utilisez une boucle jusqu'à la longueur du marqueur (si vous avez plusieurs marqueurs) pour supprimer ces marqueurs. Consultez l'exemple ici OU mettez les Visible false et n'utilisez pas map.clear(); dans ce cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X