没有获得Marker infowindow的数据点击GoogleMap v2 android

时间:2013-09-30 22:48:26

标签: android google-maps android-maps-extensions

我正在使用Google地图扩展程序库。我有这个:

int nsize = visibleMarkers.size();
                for (int i = 0; i < nsize; i++) {
                    String title = visibleMarkers.valueAt(i).getTitle();
                    String desc = visibleMarkers.valueAt(i).getDesc();
                    Float latitude = visibleMarkers.valueAt(i).getLat();
                    Float longitude = visibleMarkers.valueAt(i).getLon();

                    m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(latitude, longitude))
                            .title(title)
                            .icon(BitmapDescriptorFactory
                                    .fromResource(R.drawable.snotel_marker)));

                }

并使用所有标记填充地图。

我正在尝试将数据添加到toast中,以便在点击时从标记窗口查看说明和标题:

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                            @Override
                            public void onInfoWindowClick(Marker marker) {
                                Toast.makeText(MainActivity.this,
                                        "Title: " + visibleMarkers.valueAt(i).getTitle(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        });

当我添加这个setOnInfoWindow Listener时,i变量需要是最终的。我想从我的visibleMarkers SparseArray中获取标记的标题,但我无法弄清楚如何从我点击的标记中获取数据。我知道desc中有信息,因为使用.snippet(desc)显示标记点击的信息。

我在这里缺少什么?

EDIT :::

我改变了我的onPostExecute,将Marker m和我的数据添加到另一个数组中:

int nsize = visibleMarkers.size();
                for (int i = 0; i < nsize; i++) {
                    MapMarkers marks = new MapMarkers();
                    String title = visibleMarkers.valueAt(i).getTitle();
                    String desc = visibleMarkers.valueAt(i).getDesc();
                    Float latitude = visibleMarkers.valueAt(i).getLat();
                    Float longitude = visibleMarkers.valueAt(i).getLon();

                    m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(latitude, longitude))
                            .title(title)
                            .icon(BitmapDescriptorFactory
                                    .fromResource(R.drawable.snotel_marker)));

                    marks.setTitle(title);
                    marks.setDesc(desc);

                    markerInfo.put(m, marks);

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

                            MapMarkers markInfo = markerInfo.get(marker);

                            Intent i = new Intent(MainActivity.this,
                                    MarkerInformation.class);
                            i.putExtra("name", markInfo.getTitle()).putExtra(
                                    "description", markInfo.getDesc());
                            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(i);

                        }

                    });
                }

这看起来是否正确?

2 个答案:

答案 0 :(得分:2)

首先,在您的setOnInfoWindowClickListener中,“i”与您按下的标记无关,与 it 的唯一连接是{{ 1}} marker方法中传递的对象。 您可以直接从这个标记对象获取数据,该对象包含您需要的所有数据,如果您不想这样,请解释更多您的问题

答案 1 :(得分:1)

试试这个

Toast.makeText(MainActivity.this, "Title: " + m.getTitle(), Toast.LENGTH_SHORT).show();

请注意,m必须在外面声明。