Удалить itemizedOverlay во время onLocationChanged

Чего я хочу добиться, так это иметь 2 вида маркеров, отображаемых на карте.

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

            }

        }

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

Спасибо.

2 ответа

Решение

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

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

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

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

position = new MyLocationOverlay(this, mapView);
position.enableMyLocation();
mapOverlays.add(position);
Другие вопросы по тегам