我有一个简单的“地方”课程:
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;
}
}
我正在向这样的ArrayList添加“Places”:( 注意名称不唯一)
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) {
}
});
哪个有效,但是,我唯一可以做的就是得到标记的标题,这不是唯一的,所以我无法真正找到点击哪个EXACT“Place”对象。有任何想法吗?感谢
答案 0 :(得分:10)
您可以使用LatLng
上通过调用getPosition()
返回的Marker
对象来唯一标识每个Marker
,并在places
中找到匹配项阵列。
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
答案 1 :(得分:1)
以这种方式编辑你的循环
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找到位置。
答案 2 :(得分:1)
我使用对象的键来查找它 例如,我有两个地方:
如果我使用它,它们在标记中看起来是相同的:place1:name =“test”,address =“test2”,id = 0
place2:name =“test”,address =“test2”,id = 1
while check3 == True:
所以要区分它们我修改了代码:
map.addMarker(new MarkerOptions().position(latlng)
.title(name).snippet(address);
并且在infoWindowClickListener中我只是通过
访问id map.addMarker(new MarkerOptions().position(latlng)
.title(id+"-"name).snippet(address);
正在停止您的自定义infoWindow 并创建您的对象“地方” http://androidfreakers.blogspot.com/2013/08/display-custom-info-window-with.html
答案 3 :(得分:1)
我有一个获取标记索引的方法,您可以使用它来获取Places中的元素。
Entity(clooney) & Has(clooney, starred, gravity) & Has(clooney, bornIn, lexington) & ...
getMarkerIndex()方法:
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Log.i("MAP", "the index of this element is: " + String.valueOf(getMarkerIndex(marker.getId())));
}
});
答案 4 :(得分:0)
我建议使用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
}
});
答案 5 :(得分:0)
试试这个
&#xA;&#xA; {&#xA; ...&#xA; map.setOnMarkerClickListener(本);&#XA;对于(放置地点:地方)&#xA; map.addMarker(new MarkerOptions()。position(place.latlng).title(place.name);&#xA; ...&#xA;}&#xA;&#xA; @Override&#xA; public boolean onMarkerClick(最终标记标记){&#xA; //句柄点击此处&#xA;}&#xA;
&#xA;