我正在使用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);
}
});
}
这看起来是否正确?
答案 0 :(得分:2)
首先,在您的setOnInfoWindowClickListener
中,“i”与您按下的标记无关,与 it 的唯一连接是{{ 1}} marker
方法中传递的对象。
您可以直接从这个标记对象获取数据,该对象包含您需要的所有数据,如果您不想这样,请解释更多您的问题
答案 1 :(得分:1)
试试这个
Toast.makeText(MainActivity.this, "Title: " + m.getTitle(), Toast.LENGTH_SHORT).show();
请注意,m必须在外面声明。