【问题标题】:InfoWindows doesn't take each info window markerInfoWindows 不采用每个信息窗口标记
【发布时间】:2018-06-12 08:08:29
【问题描述】:

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

这是我的代码:

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

当我点击每个标记时,每个标记信息窗口只显示“Giant Ekspres, Jl. Urip Sumoharjo, Klitren, Gondokusuman, Kota Yogyakarta”。

【问题讨论】:

  • (1) 您想使用 toast 还是希望在信息窗口中显示附加信息? (2) 无需在每个循环上添加setOnInfoWindowClickListener()。 (3)你是什么地图对象“mMap”或`googleMap“?

标签: android google-maps


【解决方案1】:

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

如果您想为每个标记显示 alamat 的内容,就像您想要的那样,那么最简单的方法是将标记的标记字段设置为 alamat 的内容,然后在侦听器中使用标记的标记字段吐司:

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();

                }
            });

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多