【问题标题】:Google Maps v2 - Get the object related to a markerGoogle Maps v2 - 获取与标记相关的对象
【发布时间】:2016-04-28 00:41:55
【问题描述】:

我正在开发一个应用程序,可以动态地将标记添加到谷歌地图。每个标记都是从自定义 Map 对象生成并通过 SparseArray 关联。这是我用来将标记与 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 对象的引用,以便获取包含此标记的所有数据特定的地图对象。像这样的:

    /**
     * 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;
        }
    };

非常感谢您抽出宝贵时间。对不起我的英语(我正在尝试摆脱 Google 翻译 xD)。

【问题讨论】:

标签: android google-maps


【解决方案1】:

首先,您应该更改您的 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;
        }
    };

【讨论】:

  • 谢谢。这不是问题,它是在 addMarkers() 方法中使用 SparseArray 完成的。现在我需要获取链接到标记的 Map 对象的引用。
  • 明白,对不起。请检查我编辑的答案。
  • 非常感谢。我不得不稍微更改您的代码以使其适应我的需要,但想法就在那里。它有很大帮助。检查为正确答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2012-12-02
  • 2017-08-10
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多