Android谷歌地图添加多个标记,无法绑定onInfoWindowClick方法

时间:2015-05-29 20:11:17

标签: java android google-maps

我目前正在尝试为我的Android应用添加多个标记。这非常完美。我唯一被困住的事实是我不能在多个标记上绑定多个“onInfoWindowClick”。

例如,如果我喜欢:

                for (int i = 0; i < randomList; i++) {

                        MarkerOptions marker = new MarkerOptions().position(latlng).title(MainActivity.list.get(i).aMessage);

                            // adding marker
                            googleMap.addMarker(marker);



                        googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                            @Override
                            public void onInfoWindowClick(Marker marker) {
                                // Do something onclick
                            }
                        });

                }

这会导致每个标记的infowindowclick工作正常,但我总是在“//做某事onclick”内部得到相同的数据,这是因为最后一个标记被设置为此事件。

将此事件附加到多个标记的步骤是什么?

2 个答案:

答案 0 :(得分:0)

在每个循环上创建一个新的Marker并执行方法:showInfoWindow();

 for (int i = 0; i < randomList; i++) {

                      //  MarkerOptions marker = new MarkerOptions().position(latlng).title(MainActivity.list.get(i).aMessage);   
                     // adding marker
                     //    googleMap.addMarker(marker);    
googleMap.addMarker(new MarkerOptions().position(latlng).title(MainActivity.list.get(i).aMessage)).showInfoWindow();



                        googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                            @Override
                            public void onInfoWindowClick(Marker marker) {
                                // Do something onclick
                            }
                        });

                }

顺便设置相同的latlng值!

答案 1 :(得分:0)

你不应该在循环中调用setOnInfoWindowClickListener(),这只需要调用一次,它将适用于所有标记。

传递到onInfoWindowClick(Marker marker)的Marker对象将始终是刚刚单击的Marker。

所以,把它拿出来。接下来,为了弄清楚Marker刚刚点击了什么,您可以获得Marker的标题,并遍历您的列表,直到找到具有与{Marker's title'对应的aMessage值的列表项。 / p>

请注意,您还可以通过调用marker.getPosition();按位置识别当前标记。

       googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(Marker marker) {
                //get location of Marker that was just clicked
                LatLng latLon = marker.getPosition();

                // get the title of Marker that was just clicked
                String title = marker.getTitle();

                //find item in the list that corresponds to currently clicked Marker
                for (int i = 0; i < MainActivity.this.list.size(); i++){
                    if (title.equals(MainActivity.this.list.get(i).aMessage)){
                        //found current list item corresponding to
                        //the Marker that was just clicked!
                    }
                }
            }
        });

        for (int i = 0; i < randomList; i++) {

            MarkerOptions marker = new MarkerOptions().position(latlng).title(MainActivity.this.list.get(i).aMessage);
            // adding marker
            googleMap.addMarker(marker);

        }

我回答了一个类似的问题here,您可能会发现它也很有帮助。