【问题标题】:Android Google Maps v2 - Add object to markerAndroid Google Maps v2 - 将对象添加到标记
【发布时间】:2012-12-02 18:35:43
【问题描述】:

我们如何在新的 Google Maps Android API v2 中将对象添加到标记? 那么如果我们点击InfoWindow,我们可以对这个对象做点什么吗?

public void addSpotOnMap(Spot spot) {
    getMap().addMarker(new MarkerOptions()
            .position(new LatLng(spot.getParseGeoPoint().getLatitude(), spot.getParseGeoPoint().getLongitude()))
            .title(spot.getName())
            .snippet(spot.getCategory())
            .draggable(false));

}

这会设置对象的位置、标题和 sn-p。但是如果我点击InfoWindow

【问题讨论】:

  • 你可以使用android-maps-extensions 它扩展了 Marker 和 Polygon 类,并允许你从中设置和获取对象

标签: android google-maps-markers google-maps-android-api-2


【解决方案1】:

不确定这是否是正确答案,但请查看我针对此问题撰写的这篇博文:

由于Marker 是final,这可以通过将数据与Map 中的Marker 链接来轻松解决,例如HashMap<Marker, YourDataClass> 或HashMap<Marker, String>

这是一个解释所有内容的教程: http://bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html

【讨论】:

  • 我也没有看到任何其他方法。
  • 感谢您回复解决方案。
  • 请不要添加仅链接的答案,请在 SO 上提供解决方案的摘要
  • 将标记作为键存储在哈希图中的错误情况。存储标记引用也很糟糕
  • @Yahor10 你能解释一下为什么这很糟糕吗?
【解决方案2】:

从 Play Services v9.4.0 开始,您现在可以直接在标记上设置任何对象!

保存数据:

Marker marker = getMap().addMarker(new MarkerOptions()
        .position(lat, lng)
        .title(spot.getName());

CustomObject myData = new CustomObject();
marker.setTag(myData);

然后检索您的数据:

CustomObject myRestoredData = (CustomObject)marker.getTag(myData);

有关标记数据的更多信息,here are the docs。

【讨论】:

  • 我知道这是一个老问题,但我希望他们能像在 iOS 中一样添加 userData 选项。
【解决方案3】:

试试android-maps-extensions它的库,你可以通过setdata方法添加对象来标记和检索数据调用方法getData

Read more

Object getData() and setData(Object) on Marker, Circle, GroundOverlay, Polygon, Polyline or TileOverlay

来自 Gradle 您可以使用任何版本的 Google Play 服务

dependencies {
    compile 'com.androidmapsextensions:android-maps-extensions:2.2.0'
    compile 'com.google.android.gms:play-services-maps:8.1.0'
}

【讨论】:

    【解决方案4】:

    您可以在将对象添加到地图后将其绑定在标记内,例如:

    MarkerOptions markerOptions = new MarkerOptions().position(YOUR_LANG_LAT).title(YOUR_TITLE);
    Marker addedMarker = mMap.addMarker(markerOptions);
    CustomObject obj = new CustomObject();
    addedMarker.setTag(obj);
    

    然后在地图上单击例如,您可以将对象检索为:

    mMap.setOnMarkerClickListener(marker -> {
        CustomObject obj = (CustomObject) marker.getTag();
    
        return false;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2012-12-31
      • 2013-03-31
      • 1970-01-01
      • 2013-06-14
      • 2012-11-22
      相关资源
      最近更新 更多