Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 删除onLocationChanged期间的itemizedOverlay_Android_Itemizedoverlay - Fatal编程技术网

Android 删除onLocationChanged期间的itemizedOverlay

Android 删除onLocationChanged期间的itemizedOverlay,android,itemizedoverlay,Android,Itemizedoverlay,我想要实现的是在地图上显示两种标记 1) 显示从数据库绘制的事件的红色标记(完成-ItemizeOverlay) 2) 橙色标记,将动态显示用户在地图上的位置(ItemizeOverlay2) 我使用ItemizedOverlay来拥有两个不同的层(一个用于事件,一个用于用户位置),但是我对显示用户位置的动态标记有一个问题 问题: 发生的情况是LocationListener成功获取纬度/经度并在地图上放置一个点,但上一个点仍然存在。因此,我有一系列标记显示用户的位置 我已经实现了一些搜索互联网

我想要实现的是在地图上显示两种标记

1) 显示从数据库绘制的事件的红色标记(完成-ItemizeOverlay)

2) 橙色标记,将动态显示用户在地图上的位置(ItemizeOverlay2)

我使用ItemizedOverlay来拥有两个不同的层(一个用于事件,一个用于用户位置),但是我对显示用户位置的动态标记有一个问题

问题:

发生的情况是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);

            }

        }
我知道您可能需要更多我的代码,但让我们呆在这里,看看是否有人看到我的错误


谢谢。

您尚未发布itemizedOverlay2所属类的代码,但我猜它扩展了ItemizedOverlay。因为它有一个addOverlay()方法,我猜它也有一个.clear()方法

如果是这样,则应该在添加新位置之前调用clear()

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

使用内置类
MyLocationOverlay

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

关于itemizedOverlay2扩展了一个名为MyItemizedOverlay的类,您是对的。事情是没有clear()方法。clear()方法可用于我尝试过的mapOverlays mapOverlays.clear(),它同时清除itemizedOverlay和ItemizedOverlay2,然后您应该编写一个clear()方法。public void clear(){mOverlays.clear();}这不会同时删除这两项吗?(itemizedOverlay和itemizedOverlay2)?不可能,请调用clear删除覆盖上已经存在的项目,然后添加覆盖以添加新项目,如发布的答案所示。你是对的,它起作用了。我是android新手,尽管我尝试了clear()方法,但还是清除了这两项。没有想过用你刚才提到的方式:)我真傻。谢谢。我已经考虑过了,但这是另一种方法,不是解决我问题的办法。但是使用MyLocationOverlay,我不知道如何更改接收位置的频率,通常我不知道它是否可以完成LocationListener所能做的所有事情。此链接可能对您有用:。