InfoWindows不采用每个信息窗口标记



我从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 记录: 在此处输入图像描述

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

每个映射对象只有一个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();
}
});

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

相关内容

  • 没有找到相关文章

最新更新