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í:

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

  • Cargando el fragmento Google Maps de Google Maps administrado por ViewPager
  • Google Map API V2 - ¿Cómo puedo mantener un marcador en el centro de la pantalla mientras el usuario está desplazando el mapa?
  • Google Maps Android API v2: Visualización del radio de búsqueda con la ayuda de ValueAnimator
  • Contenido dinámico en Maps V2 InfoWindow
  • TileProvider utilizando azulejos locales
  • Navegación de Android google map turn by turn
  • Propósito de Google Maps 7.0.0 con ubicación
  • Cómo dibujar polilla discontinua con android google map sdk v2?
  • 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.