【问题标题】:Android Google maps adding multiple markers, cannot bind onInfoWindowClick methodAndroid谷歌地图添加多个标记,无法绑定onInfoWindowClick方法
【发布时间】:2015-05-29 20:11:17
【问题描述】:

我目前正在尝试向我的 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 对于每个标记都有效,但我总是在“// Do something onclick”中得到相同的数据,这是因为最后一个标记被设置为此事件。

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

【问题讨论】:

  • 你到底想做什么?

标签: java android google-maps


【解决方案1】:

在每个循环上创建一个新的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 值!

【讨论】:

    【解决方案2】:

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

    传入onInfoWindowClick(Marker marker) 的 Marker 对象将始终是刚刚被点击的 Marker。

    所以,把它排除在循环之外。接下来,为了弄清楚刚刚点击了什么标记,您可以获取标记的标题,然后循环遍历您的列表,直到找到具有与标记标题对应的aMessage 值的列表项。

    请注意,您还可以通过调用 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,您可能会发现这也很有帮助。

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 1970-01-01
      • 2021-11-24
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2011-09-11
      • 1970-01-01
      相关资源
      最近更新 更多