Android谷歌地图,如何让每个Marker InfoWindow打开不同的Activity? [英] Android Google Maps, how to make each Marker InfoWindow open different Activity?
问题描述
我使用以下代码段来显示谷歌地图上的多个位置。我把这些坐标看作一个数组。在地图上显示标记之后,我想在点击标记的Infowindows后进行一项活动。点击后,每个单标记的infowindow应该有不同的活动。我有4个标记,我想通过点击infowindow访问4个不同的活动。我应该如何实现这一点。谢谢
我在地图上放置标记的代码
标记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,然后,使用 OnInfoWindowClickListener
来获取用户点击该事件的事件。 信息窗口,并使用HashMap来确定要打开哪个Activity。
将HashMap声明为实例变量:
//声明HashMap来存储marker到Activity的映射
HashMap< String,String> markerMap = new HashMap< String,String>();
然后,每次添加标记时,在HashMap中输入一个条目:
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。这个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);
}
}
});
I use following code segment for display several locations on google map. I get those coordinates as a array. After displaying markers on the map i want to go for a activity after clicking Infowindows of marker. Each infowindow of single marker should have different activity after clicking it. I have 4 markers and i want to access 4 different activities by clicking infowindow. How should i implement this. Thank you
My code of put markers on map
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]));
Use a HashMap to store the marker ID and it's corresponding identification of which Activity it should open.
Then, use a OnInfoWindowClickListener
to get the event of a user clicking the info window, and use the HashMap to determine which Activity to open.
Declare the HashMap as an instance variable:
//Declare HashMap to store mapping of marker to Activity
HashMap<String, String> markerMap = new HashMap<String, String>();
Then, each time you add a Marker, make an entry in the HashMap:
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");
}
And then define the info window click listener:
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);
}
}
});
这篇关于Android谷歌地图,如何让每个Marker InfoWindow打开不同的Activity?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!