Google Maps v2 - 获取与标记相关的对象

时间:2016-04-27 16:19:05

标签: android google-maps

我正在开发一款应用程序,可以在谷歌地图上添加标记。每个标记都是通过 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)。

1 个答案:

答案 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;
        }
    };