InfoWindows没有采用每个信息窗口标记

时间:2018-06-11 22:15:00

标签: android google-maps

我从sqlite加载标记,然后循环从sqlite获取数据,将标记放到每个纬度和经度。有用。 但是当我尝试从每个标记获取信息窗口时,它不起作用。它只需要一个infowindow。

这是我的代码:

while (cursor.moveToNext()){

                // mengambil koordinat lokasi ATM

                title = cursor.getString(1).toString();
                __global_endposition = cursor.getString(2).toString();
                alamat = cursor.getString(3).toString();
                String[] exp_endCoordinate = __global_endposition.split(",");
                double lat_endposition = Double.parseDouble(exp_endCoordinate[0]);
                double lng_endposition = Double.parseDouble(exp_endCoordinate[1]);
                LatLng endx = new LatLng(lat_endposition, lng_endposition);

                MarkerOptions options = new MarkerOptions()
                        .position(endx)
                        .title(title)
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
//                mMap.addMarker(options);
                Marker marker = googleMap.addMarker(options);
                mapBuilder.include(marker.getPosition());
                addedMarker = true;

                googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                    @Override
                    public void onInfoWindowClick(Marker marker) {
                        Toast.makeText(getActivity(), alamat, Toast.LENGTH_SHORT).show();

                    }
                });

            }

这是我的sqlite记录: enter image description here

当我登上每个标记时,它只显示了#E;巨人Ekspres,Jl。 Urip Sumoharjo,Klitren,Gondokusuman,Kota Yogyakarta"到每个标记信息窗口。

1 个答案:

答案 0 :(得分:0)

每个地图对象只有一个onInfoWindowClick侦听器。在您的情况下,您敬酒alamat的内容,它始终是最后一个游标结果(列索引3)字符串。

如果您希望为每个标记显示您想要的alamat内容,那么最简单的方法是将标记的标记字段设置为alamat的内容,然后在监听器中使用toast中标记的标记字段:

alamat = cursor.getString(3).toString();

// ...

MarkerOptions options = new MarkerOptions()
    .position(endx)
    .title(title)
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
Marker marker = googleMap.addMarker(options);
marker.setTag(new String(alamat));

// ...

googleMap.setOnInfoWindowClickListener(new 
    GoogleMap.OnInfoWindowClickListener() {
                @Override
                public void onInfoWindowClick(Marker marker) {
                    Toast.makeText(getActivity(), marker.getTag().toString(), Toast.LENGTH_SHORT).show();

                }
            });

您很快就会发现,您可能希望做的不仅仅是显示标记字符串。因此,您可以在代码中使用更复杂的对象,也可以使用marker中的onInfoWindowClick ID来访问托管的标记数据集合,例如Hashmap。