Android谷歌地图,如何让每个标记InfoWindow打开不同的Activity?
我使用以下代码段来显示谷歌地图上的多个位置。 我把这些坐标作为一个数组。 在地图上显示标记之后,我想在点击标记的Infowindows之后进行一个活动。 单个标记的每个infowindow在点击后应该有不同的活动。 我有4个标记,我想通过点击infowindow访问4个不同的活动。 我应该如何实现这一点。 谢谢
我在地图上放置标记的代码
Marker a1 = googleMap.addMarker(new MarkerOptions().position(a) .title(arr[0]) .snippet(arr[1]) ); Marker b1 = googleMap.addMarker(new MarkerOptions().position(b) .title(arr[9]) .snippet(arr[10]) ); Marker c1= googleMap.addMarker(new MarkerOptions().position(c) .title(arr[18]) .snippet(arr[19])); Marker d1= googleMap.addMarker(new MarkerOptions().position(d) .title(arr[27]) .snippet(arr[28]));
使用一个HashMap来存储标记ID,它是相应的标识,它应该打开哪个Activity。
然后,使用OnInfoWindowClickListener
获取用户单击信息窗口的事件,并使用HashMap确定要打开哪个活动。
声明HashMap作为一个实例variables:
//Declare HashMap to store mapping of marker to Activity HashMap<String, String> markerMap = new HashMap<String, String>();
然后,每次添加标记时,在HashMap中input一个条目:
String id = null; Marker a1 = googleMap.addMarker(new MarkerOptions().position(a) .title(arr[0]) .snippet(arr[1])); id = a1.getId(); markerMap.put(id, "a1"); Marker b1 = googleMap.addMarker(new MarkerOptions().position(b) .title(arr[9]) .snippet(arr[10])); id = b1.getId(); markerMap.put(id, "b1"); Marker c1= googleMap.addMarker(new MarkerOptions().position(c) .title(arr[18]) .snippet(arr[19])); id = c1.getId(); markerMap.put(id, "c1"); Marker d1= googleMap.addMarker(new MarkerOptions().position(d) .title(arr[27]) .snippet(arr[28])); id = d1.getId(); markerMap.put(id, "d1"); }
然后定义信息窗口点击侦听器:
googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { String m = markerMap.get(marker.getId()); if (m.equals("a1")){ Intent i = new Intent(MainActivity.this, ActivityA1.class); startActivity(i); } else if (m.equals("b1")){ Intent i = new Intent(MainActivity.this, ActivityB1.class); startActivity(i); } else if (m.equals("c1")){ Intent i = new Intent(MainActivity.this, ActivityC1.class); startActivity(i); } else if (m.equals("d1")){ Intent i = new Intent(MainActivity.this, ActivityD1.class); startActivity(i); } } });
我可以看到多个字段已链接:
- 标题
- 片段
- 位置
- 活动
以下是如何在代码中完成此操作的过程:
-
创build一个自定义类:
public static class MyMarker { Marker marker; MarkerOptions options = new MarkerOptions(); Class activity; public MyMarker(String title, String snippet, LatLng position, Class activity) { // MarkerOptions options.title(title) .snippet(snippet) .position(position); // Target activity this.activity = activity; } // Compare Marker variable instead of MyMarker @Override public boolean equals(Object o) { return o != null && o.equals(marker); } }
-
准备标记:
final List<MyMarker> myMarkers = new ArrayList<>(); myMarkers.add(new MyMarker("title1", "snippet1", new LatLng(10, 10), MainActivity1.class)); myMarkers.add(new MyMarker("title2", "snippet2", new LatLng(20, 20), MainActivity2.class));
-
将标记添加到GoogleMap并保存返回的对象:
for (MyMarker myMarker : myMarkers) { myMarker.marker = googleMap.addMarker(myMarker.options); }
-
在您的地图上添加一个标记点击侦听器:
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // Will use the overridden equals method int index = myMarkers.indexOf(marker); if (index != -1) { // Considering that MainActivity is the current activity Intent intent = new Intent(MainActivity.this, myMarkers.get(index).activity); startActivity(intent); } return false; } });
上面的监听器会在添加的标记数组中查找被点击的标记,如果它在那里,将会启动相关的活动。
- 错误:ConnectionResult {statusCode = INTERNAL_ERROR,resolution = null}
- 如何在Android中以编程方式设置ImageViews源代码?
- Android Studio – 模拟器 – eglSurfaceAttrib未实现
- 如何在Android Studio中的模拟器上安装一个apk?
- Android 6.0上的蓝牙低功耗startScan无法find设备
- VectorDrawable – 它是否可用于Android的前棒棒糖版本?
- 如何在64位Android设备上使用32位本机库
- 使用Googlelogin进行身份validation时出现错误12501
- Android:什么是android.R.id.content用于?