2015-06-30 42 views
0

我正在開發一個使用google-map庫的Android應用程序。 主要問題是管理(latutide,longitude)座標和整數之間的映射。 因此,在活動中,我有一個HashMap<LatLng,Integer>對象,名爲dict,它可以完成這項工作。onDragStart返回一個不同的標記

我向用戶展示dict的內容,將Marker對象放在地圖上,當用戶選擇一個新標記時,我在標籤中顯示相關的整數。

除拖放功能外,所有工作都正常。

GoogleMap.OnMarkerDragListener onMarkerDragListener = new 
GoogleMap.OnMarkerDragListener() { 

     private int content; 

     @Override 
     public void onMarkerDragStart(Marker marker1) { 
      content = dict.remove(marker1.getPosition()); // NULL 
     } 

     ... 

     @Override 
     public void onMarkerDragEnd(Marker marker2) { 
      dict.put(marker2.getPosition(), content); 
     } 
    }; 

錯誤是與「NULL」,其中選擇用於稱爲marker1拖動該標記時,具有位置(LatLng對象),它是不dict映射的關鍵評論的行。

我的印象是,當用戶選擇一個拖動標記時,系統會刪除這個標記並返回一個位置稍有不同的新標記。

這似乎不真實......我該如何解決這個問題?

回答

0

問題不在於拖曳偵聽器返回的標記,而在於您使用LatLng作爲dict的關鍵字而不是標記本身(或markerID)。 文檔不清楚,但我相當確信getPosition()爲您提供了一個位置的副本,而remove函數使用'=='方法而不是「equals」。 所以我的建議是使用整個標記作爲代詞鍵(這會更好,並且您可以隨時檢索位置),或者使用markerID作爲字典的鍵(但可以更改),方法是使用:

myMarker.getId() 

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Marker#getId()

+0

尼斯溶液施加在10秒! – optimusfrenk