我有一個很長的變量列表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
/Marker
在GoogleMap
添加項目到HashMap
。
但是在我開始實施這個之前,我想知道是否有任何方法可以做到這一點,不涉及使用巨人HashMap
s。
是否有任何替代方法來實現此行爲而不使用HashMap
s,SparseArray
s或類似的東西?
當服務器決定它(並經常決定它)時,信息通過套接字發送,客戶端必須更新UI。此外,有時應用程序還會向服務器請求信息(或者因爲信息太舊或者因爲用戶請求它而需要更新),所以我們必須更新標記圖標和折線顏色。 清除標記並重新繪製它們是我正在做的。這不是一個好的解決方案,它是滯後的,用戶界面感覺不穩定和緩慢。當您在地圖上顯示超過500個對象時不是一個好主意。 – razielsarafan 2013-03-20 08:03:50
你試過我告訴過你的另一種方法嗎?要麼使用Listener(可能有些Listener可能對您的需求有用)要麼是對標記的引用?我現在不記得了,如果你可以或不能編輯標記並在地圖中看到效果...... – 2013-03-20 10:13:33
我在檢查你的問題,你唯一能做的就是現在你在做什麼。您必須清除標記並重新繪製它們。所以我的建議是減少更新請求的數量,或增加更新請求之間的時間。 我想你正在使用一個ItemizedOverlay,你把所有的疊加層都放進去了,不是嗎? – 2013-03-20 10:23:52