我从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"到每个标记信息窗口。
答案 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。