2013-01-14 2 views
1

지도에 마커를 고정적으로 추가합니다. 각 마커는 POCO 클래스의 한 인스턴스와 관련이 있습니다.Google Maps Android API v2 Marker를 객체에 연결하는 방법

사용자가 마커 중 하나를 클릭 할 때 사용자 정의 InfoWindow에 나머지 데이터를 표시하도록 연결해야합니다.

무엇을 제안합니까?

추 신 : 사용자가지도를 화면 이동하거나 확대 할 때마다 새로운 표식이 추가되며 앱 과부하가 걱정됩니다. 눈에 보이지 않는 마커가 처분 되었습니까?

답변

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))); 
    } 
} 

그런 다음 당신은 당신의지도에 도청 마커의 개체 ID를 찾을 수 및 세부 사항을 열고 새로운 활동과 같은 해당 데이터 뭔가를 할 수있는 OnInfoWindowClickListener를 사용할 수 있습니다.

+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 documentation] (https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment)에 대한 경고를 무시하지 않습니까?) 페이지에서 GoogleMap 객체를 유지할 수 있습니까? – WeNeigh

0

이 게시물은 오래 알고 있지만, 당신은에

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()); 
       } 
      }); 
    } 
} 
관련 문제