InfoWindow 单击侦听器

以下是如何为每个 Marker 的 InfoWindow 点击事件定义不同操作的示例。

使用标记 ID 为键的 HashMap,该值是单击 InfoWindow 时应采取的相应操作。

然后,使用 OnInfoWindowClickListener 来处理用户单击 InfoWindow 的事件,并使用 HashMap 来确定要采取的操作。

在这个简单的例子中,我们将根据单击 Marker 的 InfoWindow 打开一个不同的 Activity。

将 HashMap 声明为 Activity 或 Fragment 的实例变量:

 //Declare HashMap to store mapping of marker to Activity
HashMap<String, String> markerMap = new HashMap<String, String>();

然后,每次添加标记时,在 HashMap 中使用标记 ID 创建一个条目,并在单击 InfoWindow 时执行该操作。

例如,添加两个标记并定义要为每个标记采取的操作:

Marker markerOne = googleMap.addMarker(new MarkerOptions().position(latLng1)
        .title("Marker One")
        .snippet("This is Marker One");
String idOne = markerOne.getId();
markerMap.put(idOne, "action_one");

Marker markerTwo = googleMap.addMarker(new MarkerOptions().position(latLng2)
        .title("Marker Two")
        .snippet("This is Marker Two");
String idTwo = markerTwo.getId();
markerMap.put(idTwo, "action_two");

在 InfoWindow 单击侦听器中,从 HashMap 获取操作,并根据 Marker 的操作打开相应的 Activity:

 mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
  @Override
  public void onInfoWindowClick(Marker marker) {

    String actionId = markerMap.get(marker.getId());

    if (actionId.equals("action_one")) {
      Intent i = new Intent(MainActivity.this, ActivityOne.class);
      startActivity(i);
    } else if (actionId.equals("action_two")) {
      Intent i = new Intent(MainActivity.this, ActivityTwo.class);
      startActivity(i);
    }
  }
});

注意如果代码位于片段中,请使用 getActivity() 替换 MainActivity.this。