2013-03-12 44 views
12

基本上添加標記到地圖時,它返回新的標記,你可以從它獲得的標記ID如下獲取的地圖標記由它在谷歌地圖ID v2的

Marker m = map.addMarker(new MarkerOptions() 
          .position(new LatLng(lat,lon))); 
String id = m.getId(); 

是有辦法如果有很多標記並且你只想刪除一個標記,可以通過它的標識獲得標記?

回答

19

問題是標記ID是自動生成的,不能用於單獨跟蹤標記。已經提出了許多策略來解決這個問題。其中一個是use a hash map to track markers,然後使用您選擇的密鑰來查找特定標記並將其刪除。另一個想法是重載一個標記字段,比如snippet,然後自己添加一個鍵。例如,如果你做一個新的標記(使用谷歌的示例代碼),你可以把自己的鑰匙串入段場

mMap.addMarker(new MarkerOptions()       
.position(MELBOURNE)       
.title("Melbourne")       
.snippet(KEY + "Population: 4,137,400")); 

後來,你可以retrive使用

String s = marker.getSnippet() 
String key = s.substring(start, end) 

和關鍵然後使用條件刪除特定標記(如果匹配)。根據你需要做一種方法,我比其他人更容易和更有效率。

+0

看到http://stackoverflow.com/a/15292496 – audric 2014-09-14 22:32:53

0

最好的辦法是使用Map <int, Mark> dictionaryMark;

每次繪製時只需將標記添加到字典中即可。

29

我已經做了這種方式:

初始化變量

private GoogleMap mMap; 
private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>(); 
private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>(); 

谷歌地圖添加標記使用的ArrayList

for (int i = 0; i < myList.size(); i++) { 
    double latitude = myList.getLatitude(); 
    double longitude = myList.getLongitude(); 
    Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude))).title(myList.getTitle()) 
             .icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon)); 
    mHashMap.put(marker, i); 
} 

標記點擊收聽

@Override 
public boolean onMarkerClick(Marker marker) { 
    int pos = mHashMap.get(marker); 
    Log.i("Position of arraylist", pos+""); 
} 

希望這會幫助你。

+3

偉大的答案。這是要走的路。 – ADL 2015-11-22 07:58:33

+0

@ADL,很高興爲您提供幫助。 :) – 2015-11-23 04:47:20

+1

夥計! 。你救了我的一天:) – 2016-08-25 07:10:13

5

使用WeakHashMap<Integer,Marker>來存儲標記,因爲這樣我們就不會在內存中保留對標記的引用,也不必擔心垃圾收集的標記。

其次推薦的方法是使用帶有ID和您的自定義數據的WeakHashMap。文檔說標記對象可能會改變,所以不要使用標記作爲鍵。如果活動被殺死並恢復,但ID將保持不變。有時如果標記對象改變,它也可能返回null。

WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>(); 

希望這將有助於未來的觀衆......

+0

感謝提醒:) – 2016-08-25 07:11:47