Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android, ¿Cómo eliminar todos los marcadores de Google Map V2?

Tengo vista del mapa en mi fragmento. Necesito actualizar el mapa y añadir marcadores diferentes en función de la condición. Por lo tanto, debo quitar los últimos marcadores del mapa antes de añadir nuevos marcadores.

En realidad, hace algunas semanas la aplicación funcionaba bien y de repente sucedió. Mi código es así:

  • Android Mapview: Fusionar marcadores superpuestos en un nuevo marcador
  • Representación de MapView con los azulejos que faltan con una "x" en el centro
  • Cómo animar marcador en el mapa android api V2?
  • Android: automáticamente elige debug / release Maps clave api?
  • Esta aplicación no se ejecutará a menos que actualice Google Play Services (a través de Bazaar)
  • Cómo dibujar polilla discontinua con android google map sdk v2?
  • private void displayData(final List<Venue> venueList) { // Removes all markers, overlays, and polylines from the map. googleMap.clear(); . . . } 

    La última vez que funcionaba bien (antes de que el nuevo API de Google Map sea anunciado por el equipo de Android en E / S 2013). Sin embargo, después de eso adapté mi código para usar esta nueva API. Ahora, no sé por qué este método googleMap.clear(); No funciona

    Cualquier sugerencia sería apreciada. Gracias

    Unesdoc.unesco.org unesdoc.unesco.org

    Actualizar

    Unesdoc.unesco.org unesdoc.unesco.org

    Código completo:

     private void displayData(final List<Venue> venueList) { // Removes all markers, overlays, and polylines from the map. googleMap.clear(); // Zoom in, animating the camera. googleMap.animateCamera(CameraUpdateFactory.zoomTo(ZOOM_LEVEL), 2000, null); // Add marker of user's position MarkerOptions userIndicator = new MarkerOptions() .position(new LatLng(lat, lng)) .title("You are here") .snippet("lat:" + lat + ", lng:" + lng); googleMap.addMarker(userIndicator); // Add marker of venue if there is any if(venueList != null) { for(int i=0; i < venueList.size(); i++) { Venue venue = venueList.get(i); String guys = venue.getMaleCount(); String girls= venue.getFemaleCount(); String checkinStatus = venue.getCan_checkin(); if(checkinStatus.equalsIgnoreCase("true")) checkinStatus = "Checked In - "; else checkinStatus = ""; MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(Double.parseDouble(venue.getLatitude()), Double.parseDouble(venue.getLongitude()))) .title(venue.getName()) .snippet(checkinStatus + "Guys:" + guys + " and Girls:" + girls) .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_orange_pin)); googleMap.addMarker(markerOptions); } } // Move the camera instantly to where lat and lng shows. if(lat != 0 && lng != 0) googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), ZOOM_LEVEL)); googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { return null; } @Override public View getInfoContents(Marker marker) { return null; } }); googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { String str = marker.getId(); Log.i(TAG, "Marker id: " + str); str = str.substring(1); int markerId = Integer.parseInt(str); markerId -= 1; // Because first item id of marker is 1 while list starts at 0 Log.i(TAG, "Marker id " + markerId + " clicked."); // Ignore if User's marker clicked if(markerId < 0) return; try { Venue venue = venueList.get(markerId); if(venue.getCan_checkin().equalsIgnoreCase("true")) { Fragment fragment = VenueFragment.newInstance(venue); if(fragment != null) changeFragmentLister.OnReplaceFragment(fragment); else Log.e(TAG, "Error! venue shouldn't be null"); } } catch(NumberFormatException e) { e.printStackTrace(); } catch(IndexOutOfBoundsException e) { e.printStackTrace(); } } }); 

  • El niño especificado ya tiene un padre
  • ¿Diferencia entre content_main.xml y activity_main.xml?
  • Obtener id generado después de insertar
  • ¿Hay alguna manera de detectar si la aplicación se ha instalado con Market o no?
  • Animación FAB con viewpager / tabslider
  • Agregue sólo el borde superior e inferior en LinearLayout
  • 3 Solutions collect form web for “Android, ¿Cómo eliminar todos los marcadores de Google Map V2?”

    Bueno, finalmente encontré una forma de reemplazo para resolver mi problema. El problema interesante es cuando asignas un marcador al mapa, es id es 'm0'. Cuando se elimina del mapa y se asigna un nuevo marcador, se espera que el id deba ser 'm0' pero es 'm1'. Por lo tanto, me mostró que el id no es confiable. Así que List<Marker> markerList = new ArrayList<Marker>(); En algún lugar de onActivityCreated() de mi fragmento.

    Luego cambiado por encima del código con el siguiente. Espero que ayude a otros si tienen problema similar con los marcadores.

     private void displayData(final List<Venue> venueList) { Marker marker; // Removes all markers, overlays, and polylines from the map. googleMap.clear(); markerList.clear(); // Zoom in, animating the camera. googleMap.animateCamera(CameraUpdateFactory.zoomTo(ZOOM_LEVEL), 2000, null); // Add marker of user's position MarkerOptions userIndicator = new MarkerOptions() .position(new LatLng(lat, lng)) .title("You are here") .snippet("lat:" + lat + ", lng:" + lng); marker = googleMap.addMarker(userIndicator); // Log.e(TAG, "Marker id '" + marker.getId() + "' added to list."); markerList.add(marker); // Add marker of venue if there is any if(venueList != null) { for (Venue venue : venueList) { String guys = venue.getMaleCount(); String girls = venue.getFemaleCount(); String checkinStatus = venue.getCan_checkin(); if (checkinStatus.equalsIgnoreCase("true")) checkinStatus = "Checked In - "; else checkinStatus = ""; MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(Double.parseDouble(venue.getLatitude()), Double.parseDouble(venue.getLongitude()))) .title(venue.getName()) .snippet(checkinStatus + "Guys:" + guys + " and Girls:" + girls) .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_orange_pin)); marker = googleMap.addMarker(markerOptions); // Log.e(TAG, "Marker id '" + marker.getId() + "' added to list."); markerList.add(marker); } } // Move the camera instantly to where lat and lng shows. if(lat != 0 && lng != 0) googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), ZOOM_LEVEL)); googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { return null; } @Override public View getInfoContents(Marker marker) { return null; } }); googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { int markerId = -1; String str = marker.getId(); Log.i(TAG, "Marker id: " + str); for(int i=0; i<markerList.size(); i++) { markerId = i; Marker m = markerList.get(i); if(m.getId().equals(marker.getId())) break; } markerId -= 1; // Because first item of markerList is user's marker Log.i(TAG, "Marker id " + markerId + " clicked."); // Ignore if User's marker clicked if(markerId < 0) return; try { Venue venue = venueList.get(markerId); if(venue.getCan_checkin().equalsIgnoreCase("true")) { Fragment fragment = VenueFragment.newInstance(venue); if(fragment != null) changeFragmentLister.OnReplaceFragment(fragment); else Log.e(TAG, "Error! venue shouldn't be null"); } } catch(NumberFormatException e) { e.printStackTrace(); } catch(IndexOutOfBoundsException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } } }); } 

    Si desea borrar "todos los marcadores, superposiciones y polilíneas del mapa", utilice clear() en su GoogleMap.

    Utilice map.clear() para eliminar todos los marcadores del mapa de Google

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.