有几种方法可以做到这一点。
如果你所有的Marker
s 有一个您可以区分的值(例如标题),您可以这样做:
String title = marker.getTitle();
if ("User".equals(title)) {
// show dialog
} else if ("Event".equals(title)) {
// do thing for events
} else {
// do thing for nearby places
}
片段可用于此目的,但您必须注意创建信息窗口View
如果你不想显示这样的片段"USER"
, "EVENT"
or "NEARBY_PLACE"
常数。
更通用的方法可能是存储所有Marker
s in Set
s (or Map
s 如果你想为每个分配额外的值Marker
):
private Set<Marker> events;
private Set<Marker> nearbyPlaces;
然后检查是否被点击Marker
位于以下集合之一中:
if (user_marker.equals(marker)) {
// show dialog
} else if (events.contains(marker)) {
// do thing for events
} else if (nearbyPlaces.contains(marker)) {
// do thing for nearby places
} else {
// something is wrong, better call police (assuming there are only 3 kinds of markers)
}
最后但并非最不重要的一点是,您可以使用Android 地图扩展 http://code.google.com/p/android-maps-extensions/去除丑陋的if
声明。
创建一个OnMarkerClickListener
对于每个Marker
类型,例如:
private OnMarkerClickListener userMarkerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// show dialog
return true;
}
};
private OnMarkerClickListener eventMarkerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// do thing for events
return false;
}
};
创建时Marker
对于给定类型,分配点击侦听器:
user_marker.setData(userMarkerClickListener);
在您的全球OnMarkerClickListener
,它被添加到GoogleMap
对象调用:
@Override
public boolean onMarkerClick(Marker marker) {
OnMarkerClickListener listener = (OnMarkerClickListener) marker.getData();
return listener.onMarkerClick(marker);
}
如果你只有3种Marker
s,我会选择第二个选项,因为它简单且强大。如果超过 5 个或将来可能发生变化,使用第三个选项创建的面向对象的代码将更容易维护恕我直言。