varios studio sgoliver marcadores google example ejemplo agregar android google-maps google-maps-markers android-mapview

studio - marker google maps android



Android, ¿cómo eliminar todos los marcadores de Google Map V2? (3)

De acuerdo, finalmente encontré una forma de reemplazo para resolver mi problema. El problema interesante es cuando asigna un marcador al mapa, su ID es ''m0''. Cuando lo quita del mapa y asigna un nuevo marcador, espera que el ID sea ''m0'' pero es ''m1''. Por lo tanto, me mostró que la identificación no es confiable. Así que List<Marker> markerList = new ArrayList<Marker>(); en algún lugar de onActivityCreated() de mi fragmento.

Luego cambió el código anterior con el siguiente. Espero que ayude a otros si tienen un 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(); } } }); }

Tengo vista de mapa en mi fragmento. Necesito actualizar el mapa y agregar diferentes marcadores según la condición. Por lo tanto, debería eliminar los últimos marcadores del mapa antes de agregar nuevos marcadores.

De hecho, 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 funcionó bien (antes de que el nuevo equipo de Android anuncie la API de Google Map en I / O 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

=======

Actualizar

=======

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


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


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