【问题标题】:Interactive map android v2互动地图android v2
【发布时间】:2014-12-28 11:25:48
【问题描述】:

我想构建一个交互式 Android 地图应用。单击它们时,它将具有不同的标记类型和许多不同的选项。

第一种方法: 我从我将使用自定义 infowindows 的概念开始,但发现地图只能有一个 InfoWindowAdapter,也就是说,这种方法有另一个错误。 InfoWindows 无法向它们注册点击监听器,我需要在标记点击后显示一些可点击的 UI。

第二种方法: 标记单击会触发与标记类型相对应的 alertDialog。我很犹豫,因为 OnActivityResult 中有很多开关盒。 示例 - dialog fragments with OnActivityResult

还有其他想法吗?我错过了什么吗?

【问题讨论】:

  • 对否决票有什么解释吗?

标签: android google-maps android-dialogfragment android-maps-v2 infowindow


【解决方案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 一次只能选择一个标记,因此当用户选择另一个标记时,我们会更改侦听器。

【讨论】:

  • 为什么选择 pMarker.hideInfoWindow() ?
  • 这是我的应用程序逻辑的一部分 - 如果没有与此 InfoWindow 关联的已定义操作,只需隐藏它。抱歉,我应该把它从样本中删掉。
  • 那么您根据标记切换 WindowInfoAdapter 吗?会不会影响性能?
  • 确切地说,我根据标记更改 OnInfoWindowClickListener。基本上设置监听器只是更新引用 - 它影响性能等同于variable = someOtherVariable;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多