2012-04-25 11 views
0

達成したいのは、マップに2種類のマーカーを表示することです。それを行うデータベース(から引き出されたイベント表示onLocationChanged中にitemizedOverlayを削除する

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

このリンクはあなたに役に立つかもしれません:[アンドロイドをMapViewはマーカーを削除できません](http://stackoverflow.com/a/4634287/3577656)。 – Rajal

答えて

1

itemizedOverlay2が属するクラスのコードを投稿していませんが、ItemizedOverlayが拡張されていると思います。 addOverlay()メソッドがあるので、.clear()メソッドがあると推測しています。

もしそうなら、あなたが新しい場所にクラスMyLocationOverlayに建て

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

あなたはitemizedOverlay2について正しいですMyItemizedOverlayというクラスを拡張します 事は明確です()メソッドがありません。 clear()メソッドは、私が試してみました、それはあなたがその後、clear()メソッドを書くべき – bubbly

+0

itemizedOverlayとitemizedOverlay2の両方をクリアしmapOverlays mapOverlays.clear() のために利用可能です。 public void clear(){mOverlays.clear();} – NickT

+0

両方のアイテムを削除できませんか? (itemizedOverlayとitemizedOverlay2)? – bubbly

0

使用追加する前に、あなたは)(クリアを呼び出す必要があります:

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

私はそれを考えましたが、それは別の方法であり、私の問題の解決策ではありません。 しかし、MyLocationOverlayでは、位置の受信頻度を変更する方法はわかりません。一般に、LocationListenerができることをすべて実行できるかどうかはわかりません。 – bubbly

関連する問題