Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java 如果我第二次更改位置,上一个标记也会出现_Java_Android_Android Mapview_Android Maps - Fatal编程技术网

Java 如果我第二次更改位置,上一个标记也会出现

Java 如果我第二次更改位置,上一个标记也会出现,java,android,android-mapview,android-maps,Java,Android,Android Mapview,Android Maps,无论当前位置何时更改,我当前都会在我的当前位置上显示标记。下面的代码工作正常。但问题是,-假设我第一次通过某个位置,我的标记将在该位置,但第二次如果我通过任何其他不同的位置,那么我的标记将在第二个位置,但同时我的标记也在第一个位置,我不想要这个东西。我只需要当当前位置改变时,所有其他标记都应该消失,只有当前位置标记应该在那里。希望大家都明白 @Override public void onCreate(Bundle savedInstanceState) { su

无论当前位置何时更改,我当前都会在我的
当前位置上显示
标记
。下面的代码工作正常。但问题是,-假设我第一次通过某个位置,我的标记将在该位置,但第二次如果我通过任何其他不同的位置,那么我的标记将在第二个位置,但同时我的标记也在第一个位置,我不想要这个东西。我只需要当当前位置改变时,所有其他标记都应该消失,只有当前位置标记应该在那里。希望大家都明白

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        mapController = mapView.getController();
        mapController.setZoom(15);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, new GeoUpdateHandler());

    }

    public class GeoUpdateHandler implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            int lat = (int) (location.getLatitude() * 1E6);
            int lng = (int) (location.getLongitude() * 1E6);

            Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on);
            int markerWidth = marker.getIntrinsicWidth();
            int markerHeight = marker.getIntrinsicHeight();
            marker.setBounds(0, markerHeight, markerWidth, 0);


            myItemizedOverlay = new MyItemizedOverlay(marker);
            mapView.getOverlays().add(myItemizedOverlay);


            GeoPoint point = new GeoPoint(lat, lng);

            myItemizedOverlay.addItem(point, "myPoint1", "myPoint1");
            mapController.animateTo(point);
            String address = ConvertPointToLocation(point);
            Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

            mapView.invalidate();

        }
}
下面是我的ItemizedOverlay类-

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{

    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable marker) {
        super(boundCenterBottom(marker));
        // TODO Auto-generated constructor stub

        populate();
    }

    public void addItem(GeoPoint p, String title, String snippet){
        OverlayItem newItem = new OverlayItem(p, title, snippet);
        overlayItemList.add(newItem);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return overlayItemList.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return overlayItemList.size();
    }

    public void clear() {
        overlayItemList.clear();
        populate();
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        // TODO Auto-generated method stub
        super.draw(canvas, mapView, shadow);
        //boundCenterBottom(marker);
    }

}
公共类MyItemizeOverlay扩展了ItemizeOverlay{
private ArrayList overlayItemList=新建ArrayList();
公共MyItemizedOverlay(可牵引标记){
super(boundCenterBottom(marker));
//TODO自动生成的构造函数存根
填充();
}
公共void附加项(地质点p、字符串标题、字符串片段){
OverlayItem newItem=新的OverlayItem(p,标题,代码段);
overlayItemList.add(newItem);
填充();
}
@凌驾
受保护的OverlayItem createItem(int i){
//TODO自动生成的方法存根
返回overlayItemList.get(i);
}
@凌驾
公共整数大小(){
//TODO自动生成的方法存根
返回overlayItemList.size();
}
公共空间清除(){
overlayItemList.clear();
填充();
}
@凌驾
公共空白绘制(画布、地图视图、地图视图、布尔阴影){
//TODO自动生成的方法存根
super.draw(画布、地图视图、阴影);
//边界中心底部(标记);
}
}

在添加新项目之前,您只需删除以前添加的项目即可

public void addItem(GeoPoint p, String title, String snippet){
    OverlayItem newItem = new OverlayItem(p, title, snippet);
    overlayItemList.removeAll();
    overlayItemList.add(newItem);
    populate();
}