我想我的端口应用到新的谷歌地图API第2,但与标记进行交互时,我遇到麻烦了。
我的背景:我有一个显示公交车和公交车站的地图。 对旧库我有我自己的巴士站ItemizedOverlay,另一个用于总线。 每个人都有不同的OnTapListener(其实我使用一个外部库,以显示气球),所以当用户点击总线标记什么也不会发生,但是当他拿出公交车站标志被打开,其信息的活动。 此外,在我的ItemizedOverlay我映射每个标记与模型的公共汽车站的对象。
现在,随着新的API我有两个主要问题:
- 您可以设置与setOnInfoWindowClickListener()或你的GoogleMap对象的setOnMarkerClickListener()方法的监听器。 换句话说,你只能为整个地图一个监听器,等公交车站或公交车,我不能抽头之间进行区分。
- 这两个标记的onclick方法只接收标记对象,从那里我不能得到像公共汽车站人数太多信息,打开其活动(我希望有比分析标题字符串一个更好的办法!O_O)
我认为,这两个问题可以通过使用标志的不同subclases可以解决,但它没有构造函数并将其添加到地图,当你得到它的参考,所以我不知道这是否是可以使用自定义实现。
API是新的,所以没有关于类似的问题在网络上的许多信息。 我一直在试图找出如何解决这个问题,但我什么也没得到。 有谁知道一个可能的解决方案呢?
谢谢。
编辑:从我目前的应用程序的两种类型的标记的地图截图:
我遇到了这个问题为好。 我的解决办法是:
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)
将任意数据与标记关联。
确定这里是一个解决方案,我决定使用和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());.
...
}
您可以使用这样的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;
}