2012-04-25 2 views
0

То, что я хочу достичь, состоит в том, чтобы на карте отображалось 2 вида маркеров.Удалить itemizedOverlay во время onLocationChanged

1) Красные маркеры, которые отображают события, извлеченные из базы данных (сделано это - itemizedOverlay)

2) Оранжевый маркер, который будет динамически отображать местоположение пользователя на карте (itemizedOverlay2).

Я использую ItemizedOverlay, чтобы иметь 2 разных слоя (один для событий и один для местоположения пользователя), но у меня проблема с динамическим маркером, который показывает позицию пользователя.

ВОПРОС:

Что происходит это LocationListener успешно получает широту/долготу и помещает точку на карте, но в предыдущем пункте все еще существует. Поэтому у меня есть след маркеров, показывающих местоположение пользователя.

Я реализовал несколько способов поиска в Интернете, но ни один из них не происходит во время вызова onLocationChanged.

class myLocationListener implements LocationListener{ 
     OverlayItem overlayItem; 


     @Override 
     public void onLocationChanged(Location location) { 

      if (location != null){ 

       mapOverlays.remove(itemizedOverlay2); 
       mapView.invalidate(); 

       lat = location.getLatitude(); 
       longi = location.getLongitude(); 
       GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (longi * 1E6)); 
       mControl.animateTo(point); 

       overlayItem = new OverlayItem(point, "My Location", "This is probably where you are"); 
       itemizedOverlay2.addOverlay(overlayItem); 
       mapOverlays.add(itemizedOverlay2); 

      } 

     } 

Я знаю, что вам может понадобиться больше моего кода, но давайте просто оставаться в этом блоке увидеть, если кто-то видит, где я получаю это неправильно.

спасибо.

+0

Эта ссылка может быть полезной для вас: [Android MapView не может удалить маркер] (http://stackoverflow.com/a/4634287/3577656). – Rajal

ответ

1

Вы не разместили код для класса, к которому относится itemizedOverlay2, но я предполагаю, что он расширяет ItemizedOverlay. Поскольку он имеет метод addOverlay(), я также предполагаю, что он имеет метод .clear().

Если да, то вы должны назвать четкий(), прежде чем добавить новое местоположение

itemizedOverlay2.clear(); 
itemizedOverlay2.addOverlay(overlayItem); 
+0

Вы в точности относитесь к предметному товаруOverlay2 расширяет класс под названием MyItemizedOverlay вещь есть непонятный() способ. метод ясно() доступен для mapOverlays mapOverlays.clear() Что я попробовал, и это очищает ОБА itemizedOverlay и itemizedOverlay2 – bubbly

+0

Вы должны написать метод Clear() затем. public void clear() {mOverlays.clear();} – NickT

+0

Не удалите ли BOTH предметы? (itemizedOverlay и itemizedOverlay2)? – bubbly

0

Использовать встроенный класс MyLocationOverlay:

position = new MyLocationOverlay(this, mapView); 
position.enableMyLocation(); 
mapOverlays.add(position); 
+0

Я подумал об этом, но это альтернативный способ, а не решение моей проблемы. Но с MyLocationOverlay Я не знаю, как изменить частоту получения позиции, и, как правило, я не знаю, может ли он делать все то, что может сделать LocationListener. – bubbly