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。