单击监听器获取信息 Window Google Maps V2
Click Listener for Info Window Google Maps V2
我有一个简单的 "Place" class:
public class Plac{
String name;
int id;
LatLng latlng;
public Product(String name, int id, LatLng latlng) {
this.name = name;
this.id= id;
this.latlng = latlng;
}
}
并且我将 "Places" 添加到 ArrayList,如下所示:(注意 名称 不是 唯一)
ArrayList<Place> places = new ArrayList<Place>();
places.add(new Place("McDonald's", 1));
places.add(new Place("McDonald's", 2));
places.add(new Place("McDonald's", 3));
我正在向我的 Google 地图添加标记,如下所示:
for(Place place : places)
map.addMarker(new MarkerOptions().position(place.latlng).title(place.name);
我想知道如何为添加到地图中的每个标记添加侦听器。我试过使用
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
}
});
这是有效的,但是,我唯一能做的就是获取标记的标题,它不是唯一的,所以我无法真正找到确切的 "Place" object点击。有任何想法吗?谢谢
以这种方式编辑循环
for(Place place : places) {
Marker marker = map.addMarker(new MarkerOptions().position(place.latlng).title(place.name);
place.markerId = marker.getId();
}
当然你需要添加变量markerid到place
getId();
Gets this marker's id. The id will be unique amongst all Markers on a map.
然后在onInfoWindowClickListener
你可以通过markerId找到地方。
我使用一个对象的键来找到它
例如我有两个地方:
place1 : name= "test" , address ="test2" , id= 0
place2 : name= "test" , address ="test2" , id= 1
在标记中,如果我使用这个,它们看起来是一样的:
map.addMarker(new MarkerOptions().position(latlng)
.title(name).snippet(address);
所以为了区分它们,我将代码修改为:
map.addMarker(new MarkerOptions().position(latlng)
.title(id+"-"name).snippet(address);
在 infoWindowClickListener 中,我只是通过
访问 id
String id=marker.getTitle().substring(0,1);//if your places are < 10
第二种方式
正在破坏您的自定义信息窗口
并创建你的对象 "place"
http://androidfreakers.blogspot.com/2013/08/display-custom-info-window-with.html
我建议使用 HashMap
。
private HashMap<Marker, Place> markerMap = new HashMap<Marker, Place>();
在你的循环中:
for(Place place : places){
MarkerOption marker =new MarkerOptions().position(place.latlng).title(place.name);
map.addMarker(marker);
markerMap.put(marker, place)
}
在你的听众中:
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Place place = markerMap.get(marker);// here you get your exact Place Object
}
});
您可以只使用在 Marker
上调用 getPosition()
返回的 LatLng
对象来唯一标识每个 Marker
,并在您的 [=15] 中找到匹配项=]数组。
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
LatLng latLon = marker.getPosition();
//Cycle through places array
for(Place place : places){
if (latLon.equals(place.latlng)){
//match found! Do something....
}
}
}
});
文档:
https://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html
http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html
我有一个获取标记索引的方法,您可以使用它来获取 Places 中的元素。
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Log.i("MAP", "the index of this element is: " + String.valueOf(getMarkerIndex(marker.getId())));
}
});
getMarkerIndex() 方法:
private int getMarkerIndex(String index){
int myIndex = -1;
try{
myIndex = Integer.parseInt(index.replace("m", ""));
}catch(NumberFormatException nfe){
Log.e(TAG, nfe.getMessage());
}
return myIndex;
}
我有一个简单的 "Place" class:
public class Plac{
String name;
int id;
LatLng latlng;
public Product(String name, int id, LatLng latlng) {
this.name = name;
this.id= id;
this.latlng = latlng;
}
}
并且我将 "Places" 添加到 ArrayList,如下所示:(注意 名称 不是 唯一)
ArrayList<Place> places = new ArrayList<Place>();
places.add(new Place("McDonald's", 1));
places.add(new Place("McDonald's", 2));
places.add(new Place("McDonald's", 3));
我正在向我的 Google 地图添加标记,如下所示:
for(Place place : places)
map.addMarker(new MarkerOptions().position(place.latlng).title(place.name);
我想知道如何为添加到地图中的每个标记添加侦听器。我试过使用
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
}
});
这是有效的,但是,我唯一能做的就是获取标记的标题,它不是唯一的,所以我无法真正找到确切的 "Place" object点击。有任何想法吗?谢谢
以这种方式编辑循环
for(Place place : places) {
Marker marker = map.addMarker(new MarkerOptions().position(place.latlng).title(place.name);
place.markerId = marker.getId();
}
当然你需要添加变量markerid到place
getId();
Gets this marker's id. The id will be unique amongst all Markers on a map.
然后在onInfoWindowClickListener
你可以通过markerId找到地方。
我使用一个对象的键来找到它 例如我有两个地方:
place1 : name= "test" , address ="test2" , id= 0
place2 : name= "test" , address ="test2" , id= 1
在标记中,如果我使用这个,它们看起来是一样的:
map.addMarker(new MarkerOptions().position(latlng)
.title(name).snippet(address);
所以为了区分它们,我将代码修改为:
map.addMarker(new MarkerOptions().position(latlng)
.title(id+"-"name).snippet(address);
在 infoWindowClickListener 中,我只是通过
访问 id String id=marker.getTitle().substring(0,1);//if your places are < 10
第二种方式
正在破坏您的自定义信息窗口 并创建你的对象 "place" http://androidfreakers.blogspot.com/2013/08/display-custom-info-window-with.html
我建议使用 HashMap
。
private HashMap<Marker, Place> markerMap = new HashMap<Marker, Place>();
在你的循环中:
for(Place place : places){
MarkerOption marker =new MarkerOptions().position(place.latlng).title(place.name);
map.addMarker(marker);
markerMap.put(marker, place)
}
在你的听众中:
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Place place = markerMap.get(marker);// here you get your exact Place Object
}
});
您可以只使用在 Marker
上调用 getPosition()
返回的 LatLng
对象来唯一标识每个 Marker
,并在您的 [=15] 中找到匹配项=]数组。
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
LatLng latLon = marker.getPosition();
//Cycle through places array
for(Place place : places){
if (latLon.equals(place.latlng)){
//match found! Do something....
}
}
}
});
文档:
https://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html
http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html
我有一个获取标记索引的方法,您可以使用它来获取 Places 中的元素。
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Log.i("MAP", "the index of this element is: " + String.valueOf(getMarkerIndex(marker.getId())));
}
});
getMarkerIndex() 方法:
private int getMarkerIndex(String index){
int myIndex = -1;
try{
myIndex = Integer.parseInt(index.replace("m", ""));
}catch(NumberFormatException nfe){
Log.e(TAG, nfe.getMessage());
}
return myIndex;
}