Mam widok mapy w moim fragmencie. Muszę odświeżyć mapę i dodać różne znaczniki na podstawie warunku. Powinienem więc usunąć ostatnie znaczniki z mapy przed dodaniem nowych znaczników.Android, Jak usunąć wszystkie znaczniki z Google Map V2?
Właściwie kilka tygodni temu aplikacja działała poprawnie i nagle to się stało. Mój kod jest tak:
private void displayData(final List<Venue> venueList) {
// Removes all markers, overlays, and polylines from the map.
googleMap.clear();
.
.
.
}
Ostatni raz było w porządku pracy (przed nowym API Map Google Android ogłosić przez zespół w I/O 2013). Jednak potem zaadaptowałem swój kod, aby korzystać z tego nowego interfejsu API. Teraz nie wiem, dlaczego ta metoda nie działa!
Wszelkie sugestie będą mile widziane. Dzięki
=======
Aktualizacja
=======
Kompletny kod:
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();
}
}
});
Cóż, próbowałem tego i 'clear()' działa. Musisz zrobić coś złego ... – zbr
Nazywam tę metodę dwa razy. pierwszy nie ma problemu. po raz drugi ta linia nie usuwa znaczników i dodaje nowe znaczniki do mapy (razem ze starszymi). Tak więc myliłem to, co się dzieje. – Hesam
Dziękujemy za potwierdzenie. Spróbuję jeszcze raz sprawdzić, czy masz rację, robię coś złego :( – Hesam