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

use*_*637 7 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在向这样的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));
Run Code Online (Sandbox Code Playgroud)

我正在为我的Google地图添加标记,如下所示:

for(Place place : places)
map.addMarker(new MarkerOptions().position(place.latlng).title(place.name);
Run Code Online (Sandbox Code Playgroud)

我想知道如何为每个添加到地图的标记添加一个监听器.我试过用

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

但是,我唯一可以做的就是得到标记的标题,这不是唯一的,所以我无法真正找到点击哪个EXACT"Place"对象.有任何想法吗?谢谢

Dan*_*ent 11

你可以只用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....
               }

            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

文档:

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