用不同的标记行动地图API V2(Maps API v2 with different marker

2019-07-04 13:44发布

我想我的端口应用到新的谷歌地图API第2,但与标记进行交互时,我遇到麻烦了。

我的背景:我有一个显示公交车和公交车站的地图。 对旧库我有我自己的巴士站ItemizedOverlay,另一个用于总线。 每个人都有不同的OnTapListener(其实我使用一个外部库,以显示气球),所以当用户点击总线标记什么也不会发生,但是当他拿出公交车站标志被打开,其信息的活动。 此外,在我的ItemizedOverlay我映射每个标记与模型的公共汽车站的对象。

现在,随着新的API我有两个主要问题:

  • 您可以设置与setOnInfoWindowClickListener()或你的GoogleMap对象的setOnMarkerClickListener()方法的监听器。 换句话说,你只能为整个地图一个监听器,等公交车站或公交车,我不能抽头之间进行区分。
  • 这两个标记的onclick方法只接收标记对象,从那里我不能得到像公共汽车站人数太多信息,打开其活动(我希望有比分析标题字符串一个更好的办法!O_O)

我认为,这两个问题可以通过使用标志的不同subclases可以解决,但它没有构造函数并将其添加到地图,当你得到它的参考,所以我不知道这是否是可以使用自定义实现。

API是新的,所以没有关于类似的问题在网络上的许多信息。 我一直在试图找出如何解决这个问题,但我什么也没得到。 有谁知道一个可能的解决方案呢?

谢谢。

编辑:从我目前的应用程序的两种类型的标记的地图截图:

Answer 1:

我遇到了这个问题为好。 我的解决办法是:

private Map<Marker, MyModel> markerMap = new HashMap<>();
private GoogleMap mMap;

private void doMarkers(){
    MarkerOptions opt = new MarkerOptions();
    //Fill out opt from MyModel
    Marker marker = mMap.addMarker(opt);
    markerMap.put(marker, myModel);
}

然后在OnMarkerClickListener回调,拉你的模型了使用点击的标记HashMap中的。 还有一种方法Marker.getId()由于某种原因返回一个字符串。 我不明白为什么当你标记你不能指定一个int ID,或者你为什么把它添加到地图之前,你不能访问标记对象。

更新:经过了4年谷歌增加了一个方法Marker.setTag(Object tag)将任意数据与标记关联。



Answer 2:

确定这里是一个解决方案,我决定使用和AFAIK应该对任何情况下的工作:

private HashMap<String, MyModel> markers= new HashMap<String, MyModel>();


MyModel item = ...
MarkerOptions markerOptions = ...
markers.put(mMap.addMarker(markerOptions).getId(), item);



@Override
public void onInfoWindowClick(Marker marker) {
   MyModel mapItem = (MyModel) markers.get(marker.getId());.
   ...
}


Answer 3:

您可以使用标记的getId方法



Answer 4:

您可以使用这样的HashMarker。 在这个例子中的Y ArrayList的充电点,每个点cointaints坐标为新的ArrayList。 这个想法是你去点号。

创建一个HashMap

标记物=新的HashMap();

然后创建一个标记,并添加到地图

最终标记标记= map.addMarker(新的MarkerOptions()。位置(新经纬度(coordinates.get(j)的.getLat(),coordinates.get(j)的.getLon()))。标题(point.getName()) );

然后,你可以保存德标记值的点号

Markers.put(标记,point.getId());

而最终,你可以当你点击信息窗口得到的id值

公共无效onInfoWindowClick(标记标记){

    final long id = Marcadores.get(marker);
    Log.e("Real Marker ID", id+"");
}

要么

当您单击该标记

公共布尔onMarkerClick(标记为arg0){

    final long id = Marcadores.get(marker);
    Log.e("Real Marker ID", id+"");
    return false;
}


文章来源: Maps API v2 with different marker actions