单击“信息窗口Google Maps V2的监听器”

时间:2015-04-30 19:54:00

标签: java android google-maps google-maps-markers

我有一个简单的“地方”课程:

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”对象。有任何想法吗?感谢

6 个答案:

答案 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;