액티비티 구현 OnMarkerClickListener 사용을 피하고 로컬 OnMarkerClickListener를 사용하십시오.
// Not a good idea
class MapActivity extends Activity implements OnMarkerClickListener {
}
마커에 연결된 원본 데이터 모델을 조회하려면지도가 필요합니다
private Map<Marker, Map<String, Object>> markers = new HashMap<>();
데이터 모델이 필요합니다
private Map<String, Object> dataModel = new HashMap<>();
데이터 모델에 일부 데이터를 넣습니다.
dataModel.put("title", "My Spot");
dataModel.put("snipet", "This is my spot!");
dataModel.put("latitude", 20.0f);
dataModel.put("longitude", 100.0f);
데이터 모델을 사용하여 새 마커를 만들 때 제조업체 맵에 둘 다 추가
Marker marker = googleMap.addMarker(markerOptions);
markers.put(marker, dataModel);
클릭 마커 이벤트의 경우 로컬 OnMarkerClickListener를 사용하십시오.
@Override
public void onMapReady(GoogleMap googleMap) {
// grab for laters
this.googleMap = googleMap;
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Map dataModel = (Map)markers.get(marker);
String title = (String)dataModel.get("title");
markerOnClick(title);
return false;
}
});
mapView.onResume();
showMarkers();
ZoomAsync zoomAsync = new ZoomAsync();
zoomAsync.execute();
}
정보 창을 표시하려면 마커 맵에서 원래 데이터 모델을 검색하십시오.
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Map dataModel = (Map)markers.get(marker);
String title = (String)dataModel.get("title");
infoWindowOnClick(title);
}
});