2013-03-19 51 views
0

我有一個很長的變量列表Marker s和Polyline s我從我的服務器上獲得。在某些情況下,Marker必須更改其圖標,並且Polyline必須更改其顏色。谷歌地圖:編輯標記和多義線

我的對象有ids,所以我應該能夠知道我必須更新哪個折線/標記。但是,標記和多義線沒有setId()getId()方法,並且在服務器請求時會動態更新(並添加)它們。

我想過使用HashMap<Integer, Marker>HashMap<Integer, Polyline>爲了知道哪些項目我應該刪除,然後添加。我想到了這個:

  • 我收到一個項目。我得到它的ID。
  • 我查詢具有相同ID的項目的正確HashMap
  • 如果HashMap中沒有返回null,我打電話Marker.remove()Polyline.remove(),然後我從HashMap
  • 現在hashMap.get(id)刪除該項目應該返回null不管是什麼,所以我畫了Polyline/MarkerGoogleMap添加項目到HashMap

但是在我開始實施這個之前,我想知道是否有任何方法可以做到這一點,不涉及使用巨人HashMap s。

是否有任何替代方法來實現此行爲而不使用HashMap s,SparseArray s或類似的東西?

回答

1

我已經使用過Google Map API for Android,但是我很確定在檢查與它有關的文檔後,應該可以添加一些Listener。

你能否提供在哪些情況下信息應該改變?例如,如果標記在您點擊時發生變化,您可以使用GoogleMap.OnMarkerClickListener https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener

無論如何,如果您有標記的引用,並帶有Java變量,您是不是可以更改該信息?或者簡單地說,當你談論的這個「條件」發生時,你不能在地圖上清除標記並再次添加它們嗎?你不會有相同的標記,但結果將是相同的。恐怕你不能修改已經附加到地圖上的標記,但你可以嘗試。

+0

當服務器決定它(並經常決定它)時,信息通過套接字發送,客戶端必須更新UI。此外,有時應用程序還會向服務器請求信息(或者因爲信息太舊或者因爲用戶請求它而需要更新),所以我們必須更新標記圖標和折線顏色。 清除標記並重新繪製它們是我正在做的。這不是一個好的解決方案,它是滯後的,用戶界面感覺不穩定和緩慢。當您在地圖上顯示超過500個對象時不是一個好主意。 – razielsarafan 2013-03-20 08:03:50

+0

你試過我告訴過你的另一種方法嗎?要麼使用Listener(可能有些Listener可能對您的需求有用)要麼是對標記的引用?我現在不記得了,如果你可以或不能編輯標記並在地圖中看到效果...... – 2013-03-20 10:13:33

+0

我在檢查你的問題,你唯一能做的就是現在你在做什麼。您必須清除標記並重新繪製它們。所以我的建議是減少更新請求的數量,或增加更新請求之間的時間。 我想你正在使用一個ItemizedOverlay,你把所有的疊加層都放進去了,不是嗎? – 2013-03-20 10:23:52