2013-08-19 83 views
0

我想實現一個地圖系統,用戶可以選擇一個起點和目的地作爲兩個不同的標記。如何刪除地圖標記

當用戶長時間點擊地圖時,他們可以選擇一個按鈕來使用這個位置作爲開始或結束點。

case (R.id.setStart): 
     markerStart = mMap.addMarker(new MarkerOptions() 
     .position(this.startPoint) 
     .title("Start") 
     .draggable(true) 
     .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));  
     outputName = rGC.getStringFromCoordinates(this.startPoint.latitude, this.startPoint.longitude); 
     autocompleterStart.setText(outputName); 
     break; 
    case (R.id.setEnd): 
     markerEnd = mMap.addMarker(new MarkerOptions() 
     .position(this.endPoint) 
     .title("End") 
     .draggable(true) 
     .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

然而,當用戶重複相同的處理(選擇新的位置作爲開始/結束),我希望能夠刪除以前的標記物。因此,如果他們選擇相同的START按鈕,則會刪除先前的開始標記並創建一個新的標記。

有沒有辦法檢查地圖上是否存在特定標記。我嘗試添加marker.remove();,但是它給了我一個nullpointerexception。

 case (R.id.setEnd): 
     markerEnd.remove(); 
     markerEnd = mMap.addMarker(new MarkerOptions() 
     .position(this.endPoint) 
     .title("End") 
     .draggable(true) 
     .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));  

任何想法?先謝謝了!

+0

如果你得到一個零點異常是因爲'marker'爲空。嘗試在它之前添加'if(marker!= null)',以便在未設置標記時第一次跳過該命令。 – Robadob

+0

@Robadob它仍然不起作用,因爲我需要在方法開始時初始化兩個標記。所以它不會刪除任何東西。 – linus

+0

也許你應該將標記存儲在你的班級內的某個地方?您可以重新獲得標記的句柄的唯一方法是從用戶點擊它們。 – Robadob

回答

0

您可以使用方法,我在我的應用程序和工作的罰款已經實現...對我來說

LatLng latpoint; 

MAP.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 

      @Override 
      public void onMapLongClick(LatLng point) { 
       // TODO Auto-generated method stub 

       // MAP.clear(); 
       if (marker != null) { 
        marker.remove(); 
       } 
       latpoint = point; 
       marker = MAP.addMarker(new MarkerOptions() 
         .position(
           new LatLng(latpoint.latitude, 
             latpoint.longitude)) 
         .title(point.toString()).draggable(true) 
         .visible(true)); 

      } 

     }); 
+0

這也是對的,我的錯誤是我初始化了方法內的標記。 – linus