web-dev-qa-db-fra.com

Supprimer le marqueur précédent et ajouter un nouveau marqueur dans Google Map v2

Je souhaite supprimer un marqueur actuel après un clic long sur une carte et recréer un nouveau marqueur à cet endroit. J'ai effacé Google Map en cliquant longtemps sur la carte et un nouveau marqueur est créé, mais le marqueur précédent est également affiché. 

Mon code est:

public class EditLocation extends Fragment {

View v;
Context c;
GoogleMap MAP;
Button back;
int loc;
String lat;
boolean isTapped = true;

public EditLocation(Context c, int location, String latitude) {
    // TODO Auto-generated constructor stub
    this.c = c;
    this.loc = location;
    this.lat = latitude;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    v = inflater.inflate(R.layout.map, container, false);

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(c);
    if (status != ConnectionResult.SUCCESS) {
        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status,
                (Activity) c, requestCode);
        dialog.show();
    } else {
        FragmentManager myFM = ((FragmentActivity) c)
                .getSupportFragmentManager();
        final SupportMapFragment myMAPF = (SupportMapFragment) myFM
                .findFragmentById(R.id.fragmentmap);

        MAP = myMAPF.getMap();

        MAP.setMyLocationEnabled(true);

        LocationManager locationManager = (LocationManager) c
                .getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();

        String provider = locationManager.getBestProvider(criteria, true);

        final Location location = locationManager
                .getLastKnownLocation(provider);
        final LatLng currentPosition = new LatLng(location.getLatitude(),
                location.getLongitude());

        MAP.setOnMapClickListener(new OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
                // TODO Auto-generated method stub

                MAP.addMarker(new MarkerOptions()
                        .position(currentPosition)
                        .snippet(
                                "Lat:" + location.getLatitude() + "Lng:"
                                        + location.getLongitude())
                        .icon(BitmapDescriptorFactory
                                .defaultMarker(BitmapDescriptorFactory.HUE_Azure))
                        .title("ME"));
                Log.e("lat", "" + point);

            }
        });

        MAP.setOnMapLongClickListener(new OnMapLongClickListener() {

            @Override
            public void onMapLongClick(LatLng point) {
                // TODO Auto-generated method stub

                // isTapped = false;
                MAP.clear();

                MAP.addMarker(new MarkerOptions().position(point)

                .title(point.toString()));

            }

        });

    }

    return v;

}
20
Shani Goriwal

Créez simplement un nouvel objet marqueur et avant d'ajouter un nouveau marqueur, supprimez le précédent.

Marker marker;

MAP.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

                @Override
                public void onMapLongClick(LatLng arg0) {
                    if (marker != null) {
                        marker.remove();
                    }
                    marker = MAP.addMarker(new MarkerOptions()
                            .position(
                                    new LatLng(arg0.latitude,
                                            arg0.longitude))
                            .draggable(true).visible(true));
                }
            });

MODIFIER

Faites la même chose pour OnMapClick

MAP.setOnMapClickListener(new OnMapClickListener() {
        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub

                if (marker != null) {
                    marker.remove();
                }
            marker = MAP.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .snippet(
                            "Lat:" + location.getLatitude() + "Lng:"
                                    + location.getLongitude())
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_Azure))
                    .title("ME"));
            Log.e("lat", "" + point);

        }
    });
34
AnujMathur_07

Il suffit d'effacer la carte Google avant d'ajouter un marqueur. Comme ça: 

@Override
public void onMapLongClick(LatLng latLng) {
    googleMap.clear();

    googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title(latLng.toString())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
4
Noman

Voici un moyen simple Il vous suffit de changer la position du marqueur. Créer un objet global en tant que Marker marker;
Après cela, ajoutez un marqueur sur la carte comme 

marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791));  

Et après, utilisez marker.setPosition(newlaLng); où vous devez ajouter un marqueur.

2
Inzimam Tariq IT

S'il vous plaît essayez le code de coup: -

// Global Variable...
private Marker mPreviousMarker ;

     @Override
        public boolean onMarkerClick(Marker marker) {
            if (mPreviousMarker != null) {
                mPreviousMarker.remove();

            }
            mPreviousMarker = googleMap.addMarker(new MarkerOptions().position(latLng).icon(bitmapDescriptor));
        }

LatLng: - Votre latlong où vous voulez ajouter et bitmapDescroptor est icon. {Juste pour comprendre}

0
sharma_kunal

Il suffit de republier la réponse d'Anthony. 

La signature de la méthode pour addMarker est:

public final Marker addMarker (options MarkerOptions) Ainsi, lorsque vous ajoutez un marqueur à une carte Google en spécifiant les options du marqueur, vous devez enregistrer l'objet Marker renvoyé (au lieu de l'objet MarkerOptions que vous avez utilisé pour le créer). . Cet objet vous permet de changer l'état du marqueur ultérieurement. Lorsque vous avez terminé avec le marqueur, vous pouvez appeler Marker.remove () pour le supprimer de la carte.

En passant, si vous ne souhaitez que le masquer temporairement, vous pouvez basculer la visibilité du marqueur en appelant Marker.setVisible (booléen).

Vous pouvez trouver la réponse ici Supprimer un marqueur de Google Map

0
Sagar Devanga