聚类标记Google Maps v2 onInfoWindow方法

时间:2014-01-02 22:02:55

标签: android google-maps-markers

我想根据示例添加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);

有什么建议有什么不对吗?         }

2 个答案:

答案 0 :(得分:1)

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

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

你的PersonRenderer类中的

2。)也实现了onClusterItemRendered方法。

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

3。)正如您已经注意到的那样,我还将“标记与人”对保存到HashMap中,因为标记是标记为final的类(截至今天),我们无法将其扩展为把更多“东西”放入其中(与数据模型相关联)....

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()),而不是使用标记本身作为键,但你明白了。

答案 1 :(得分:0)

以下是如何实现这一目标的一般解决方案。

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);
                }
            });