我想构建一个交互式Android地图应用。单击它们时,它将具有不同的标记类型和许多不同的选项。
第一种方法: 我开始使用我将使用自定义infowindows的概念,但发现地图只能有单个InfoWindowAdapter,据说这种方法有另一个错误。 InfoWindows不能注册点击监听器,我需要在标记点击后显示一些可点击的UI。
第二种方法: 标记点击会触发与标记类型对应的alertDialog。我犹豫不决,因为我在OnActivityResult中会有很多切换案例。 示例 - dialog fragments with OnActivityResult
还有其他想法吗?我错过了什么吗?
答案 0 :(得分:1)
前段时间我遇到了类似的问题而且我“黑了”它如下:
mGoogleMap.setInfoWindowAdapter(new InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker pMarker) {
MarkerDescriptor descriptor = mMarkerDescriptorsMap.get(pMarker);
mGoogleMap.setOnInfoWindowClickListener(descriptor.getOnInfoWindowClickListener(MapActivity.this));
return descriptor.getInfoWindowView();
}
}
MarkerDescriptor应该是为每种特定标记类型实现的简单接口:
public interface MarkerDescriptor {
public View getInfoWindowView();
public OnInfoWindowClickListener getOnInfoWindowClickListener(Context pContext);
}
并保留参考文献:
private Map<Marker, MarkerDescriptor> mMarkerDescriptorsMap = new HashMap<Marker, MarkerDescriptor>();
这个想法的基础是GoogleMap当时只能选择一个标记,所以当用户选择另一个标记时,我们会更改监听器。