我正在开发一款应用程序,可以在谷歌地图上添加标记。每个标记都是通过 SparseArray 从自定义Map对象生成并与之相关。这是我用来将标记与Map对象相关联的方法,将标记添加到地图并设置MarkerCliclListener:
/**
* @author Flagg327
* @param _map: Array List with Map objects
*/
public void addMarkers(final ArrayList<Map> _map){
markerMap = new SparseArray<Marker>();
for(Map obj : _map) {
markerMap.put(obj.getId(), map.addMarker(getMarkerForObject(obj)));
}
// Bound map to markers
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (int cont = 0; cont < _map.size(); cont++) {
MarkerOptions marker = new MarkerOptions().position(markerMap.get(cont).getPosition());
builder.include(marker.getPosition());
}
// Bound map to markers
LatLngBounds bounds = builder.build();
int padding = dpToPx(80);
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
map.animateCamera(cu);
map.setOnMarkerClickListener(markerClickListener);
}
/**
*
* @param obj: Map object that contains marker's latitude and longitude
* @return
*/
public MarkerOptions getMarkerForObject(Map obj){
return new MarkerOptions().position(new LatLng(obj.lat, obj.lng));
}
问题是我需要在点击它们时获取与标记相关的Map对象的引用才能获取包含此标记的所有数据特定的Map对象。像这样:
/**
* Marker click listener
*/
private OnMarkerClickListener markerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// TODO Get reference to the Map Object related to *marker*
return false;
}
};
非常感谢你的时间。对不起我的英语(我正试图摆脱谷歌翻译xD)。
答案 0 :(得分:0)
首先,您应该更改SparseArray,使其将标记作为键。而且,而不是id,只需存储整个地图对象。
for (Map obj : _map) {
Marker marker = getMarkerForObject(obj));
map.addMarker(marker);
markerMap.put(marker, obj);
}
现在,当您想要获取Map对象时,只需执行
private OnMarkerClickListener markerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
mapObj = markerMap.get(marker);
return false;
}
};