【问题标题】:Clustering Markers Google Maps v2 onInfoWindow method聚类标记 Google Maps v2 onInfoWindow 方法
【发布时间】:2014-01-20 11:30:48
【问题描述】:

我想基于示例添加方法 onInfoWindowClick:

https://developers.google.com/maps/documentation/android/utility/marker-clustering

在课堂上:

https://github.com/googlemaps/android-maps-utils/blob/master/demo/src/com/google/maps/android/utils/demo/CustomMarkerClusteringDemoActivity.java

方法应该是这样的:

@Override
public void onInfoWindowClick(Person person) {
    // Does nothing, but you could go into the user's profile page, for example.

    if (person.name.equals("JOHN"))
    {
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=NEW+YORK")); startActivity(i);

有什么建议吗? }

【问题讨论】:

  • 你可以做的是在局部变量中注册变量 Person 并在“onInfoWindowClick”时重用它,因为你必须先点击一个标记才能显示 infoWindow。
  • 可以举一些简单的例子吗?

标签: android google-maps-markers


【解决方案1】:

正如您在 CustomMarkerClusteringDemoActivity 中引用的那样,您需要

1.) 实现自己的模型渲染器(PersonRenderer)

2.) 在您的 PersonRenderer 类中,还实现 onClusterItemRendered 方法。

    @Override
    protected void onClusterItemRendered(Person person, Marker marker) {
        super.onClusterItemRendered(person, marker);
        markerCamLocMap.put(marker, person);
    }

3.) 正如您已经注意到的那样,我还将“标记与人”对保存到 HashMap 中,因为标记是一个标记为最终的类(无论如何今天),我们不能将它扩展到将更多“东西”放入其中(与数据模型相关联)....

4.) 稍后在您常用的 onInfoWindowClick 方法中,其签名如下所示

    public void onInfoWindowClick(Marker marker) {
      Person person= markerCamLocMap.get(marker);
      if (person!= null && person.name.equals("JOHN") ) {
          Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=NEW+YORK")); startActivity(i);
      }
    }

您现在可以获取与标记/信息窗口相关联的“人”,并进行相应的操作。

您可能可以调整 HashMap 以使用标记的 ID 作为键 (marker.getId()),而不是使用标记本身作为键,但您明白了。

【讨论】:

    【解决方案2】:

    以下是有关如何实现此目的的一般解决方案。

    Marker profileMarker = mMap.addMarker(new MarkerOptions().position(
                        new LatLng(lat, lng)).title("Profile Name").snippet("Snippet details"));
    
    mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
                    @Override
                    public void onInfoWindowClick(Marker arg0) {
                        Intent intent = new Intent(YourCurrentActivity.this, YourProfileActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                        
                        intent.putExtra(Constants.INTENT_EXTRA_PROFILE_ID, profile_id);
                        startActivity(intent);
                    }
                });
    

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      相关资源
      最近更新 更多