2012-02-23 14 views
2

、私はすでにマップ上のいくつかの静的なオーバーレイを持っている、とGPS COORDSが変更されたとき、それは場所です変わる1つのダイナミック。だから、OSMDroidオーバーレイ複数の静的および動的な1

mapView.getOverlays().clear(); 

私の問題は、GPS COORDSが変更されたとき、私はダイナミックオーバーレイをクリアし、新しいものを作成する必要がありますが、私はそれを行うとき、それは使用して、すべてのオーバーレイをクリア、ということです、私はそれを行うより良い方法を見つけようとしています。

すべてクリアオーバーレイして、マップ上で再びそれらを配置(メモリを消費)または私は特定のオーバーレイをクリアすることができますか?

おかげ

編集:

は、これはダイナミックなマーカーである:

@Override 
public void onLocationChanged(Location location) { 
    Log.d("Location", "onLocationChanged with location " + location.toString()); 

    mLatitude = (int) (location.getLatitude() * 1E6); 
    mLongitude = (int) (location.getLongitude() * 1E6); 

    GeoPoint gpt = new GeoPoint(mLatitude,mLongitude); 

    markerYou.clear(); 
    markerYou.add(new OverlayItem(getString(R.string.markerYou), getString(R.string.markerYouDescription), gpt)); 

    mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(markerYou, new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() { 
     @Override 
     public boolean onItemSingleTapUp(final int index, final OverlayItem item) { 
      Toast.makeText(ShowMap.this, getString(R.string.markerYouDescription), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     @Override 
     public boolean onItemLongPress(final int index, final OverlayItem item) { 
      Toast.makeText(ShowMap.this, getString(R.string.markerYouDescription),Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }, mResourceProxy); 

    mapView.getOverlays().clear(); 
    mapView.getOverlays().add(mMyLocationOverlay); 
    mapView.invalidate(); 

    mapController.setCenter(gpt); 
} 

これは、静的なマーカーを置く機能である:

public void putPlacesOfInterest(){ 
    this.dh = new DataHelper(ShowMap.this); 
    List<Pontos> list = this.dh.selectAll(); 
    for(Pontos p : list){ 
     markerPlaces.add(new OverlayItem(p.getName().toString(), p.getName().toString(), new GeoPoint(p.getLat(), p.getLng()))); 
    } 
    mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(markerPlaces, new OnItemGestureListener<OverlayItem>() { 

     @Override 
     public boolean onItemLongPress(int index, OverlayItem item) { 
      Toast.makeText(ShowMap.this, "Item " + item.mTitle, Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     @Override 
     public boolean onItemSingleTapUp(int index, OverlayItem item) { 
      Toast.makeText(ShowMap.this, "Item " + item.mTitle, Toast.LENGTH_LONG).show(); 
      return true; 
     } 

    }, mResourceProxy); 

    mapView.getOverlays().add(mMyLocationOverlay); 
    mapView.invalidate(); 
} 
+0

マーカーの宣言はどのように見えますか? –

答えて

0

は、私が得た:ヘルプNickTため

Android MapView Can't Remove Marker

おかげ

int dynamicOverlayIndex = mapView.getOverlays().size() 

その後、とちょうどその1を削除することができます! 。

1

あなたが直前にオーバーレイのリストの.size()メソッドを使用する場合は、動的な1 例えばを追加それは、このソリューションを使用して解決

mapView.getOverlays().remove(dynamicOverlayIndex); 
+0

'mapView.getOverlays()。size()'はオーバーレイの数ではなく常に1を返します...そして、はい、私はマップ上にオーバーレイを置いた後に行いました... – silentw

+0

その場合、ArrayList mItemsのような、多くのITEMSでオーバーレイを1つだけ使用する必要があります。このリストの.add()、.remove(idx)、.size()メソッドを使用することもできます(例:mItems.remove(3))。だから、あなたは「動的」のアイテムを見つけて、遅れて申し訳ありません新しいもの – NickT

+0

を追加する前にそれを削除することができるはず、私は、あなたがより良い私を助けることができるかもしれない、そのようにコードで最初のポストを更新しました:)指し示す – silentw

2

本当の問題は、あなたがmMyLocationOverlayを追加していることは、あなたがmapView.getOverlays()を追加(mMyLocationOverlay)をコールしている多くの時間を持っているということです。 実際にmMyLocationOverlayをクリアしようとすると、1インスタンスだけがクリアされます。つまり、mMyLocationOverlayに20のインスタンスがある可能性があります。

ちょうど誰かが将来のためにそれを必要とする場合、問題の本当の原因を指摘したかったです。

+0

感謝をそれ以来、私はこれまでこれに取り組んでいませんでしたが、他人のための良い情報で質問を更新するのは良いことです。再度、感謝します! ;) – silentw

関連する問題