2013-01-14 74 views
1

我在地圖中動態添加了一個非固定數量的標記,每個標記都與我的POCO類的一個實例相關。如何將Google Maps Android API v2標記鏈接到對象

我需要鏈接它們,所以當用戶點擊其中一個標記時,我會顯示自定義InfoWindow中的其餘數據。

你有什麼建議? PS:我每次用戶平移或縮放地圖時都會添加新標記,我擔心應用程序超載。不可見的標記是否被丟棄?

回答

5

我建議使用HashMap或類似的東西。當你遍歷你的對象的列表,併爲他們創造的標記,也標記添加到列表中,使用對象爲重點的ID,並標記爲值:

private HashMap<Integer, Marker> markerMap = new HashMap<Integer, Marker>(); 

...

for(MarkerObject obj : this.markerObjects) 
{ 
    //If the marker isn't already being displayed 
    if(!markerMap.containsKey(obj.getId())) 
    { 
     //Add the Marker to the Map and keep track of it 
     this.markerMap.put(obj.getId(), this.mMap.addMarker(getMarkerForObject(obj))); 
    } 
} 

然後你可以使用一個OnInfoWindowClickListener找到您的地圖抽頭標記的對象ID,做一些與相應的數據,如開放與細節的新活動。

+0

喜,這個問題與其他問題有關(http://stackoverflow.com/questions/14318258/how-google-maps-android-api-v2-handle-markers-outside-the-view-are/14323819#14323819)你也回答了。我很擔心如何控制HashMap上的項目數量,我想刪除不在可見區域的項目。你有什麼建議? –

+1

我建議做一些類似於我在這篇博客文章中寫到的內容:http://discgolfsoftware.wordpress.com/2012/12/06/hiding-and-showing-on-screen-markers-with-google-maps- android-api-v2/ – DiscDev

+1

這是否不會忽視[MapFragment文檔]上的警告(https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment )關於堅持GoogleMap對象的頁面? – WeNeigh

0

我知道這個職位是舊的,但如果你是在設置地圖使用預製地圖活動在Android Studio中

private void setUpMap() { 


    Map<String,someObject>markerInfoList = new HashMap<String,someObject>(); 

    // get the marker Id as String 
     String id = mMap.addMarker(new MarkerOptions().position(new LatLng(/*set Latitude*/, /*setLongitude*/).title("Marker")).getId(); 
     //add the marker ID to Map this way you are not holding on to GoogleMap object 
     markerInfoList.put(id,mapppedHouses.get(i));  
} 

然後在:

private void setUpMapIfNeeded() { 
    ///... 
if (mMap != null) { 
    //if a marker is clicked 
    mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
       @Override 
       public void onInfoWindowClick(Marker marker) { 
        someObject = markerInfoList.get(marker.getId()); 
       } 
      }); 
    } 
} 
相關問題