我从包含其位置的对象数组中向我的地图添加标记。单击标记时,我希望它显示一个infowindow(它也从包含标记位置的对象数组中获取数据)。
我创建了一个hashmap:
HashMap<String,Marker> hashMarkers = new HashMap<>();
这是我用来添加标记的代码。仅添加中心特定范围内的标记。
for (pointNumber= 0; pointNumber<pointArray.length; pointNumber++) {
if (distanceToPointFromCenter<range) {
hashMarkers.put(String.valueOf(pointNumber),
mMap.addMarker(new MarkerOptions()
.position(new LatLng(pointArray[pointNumber].latitude, pointArray[pointNumber].longitude))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title("Title: " + pointArray[pointNumber].pointTitle)
.snippet("Snippet: " + pointArray[pointNumber].snippet)));
} else {
System.out.println("Out of range");
}
}
由于我会有很多标记,因此每次使用mMap.clear();
移动相机时都会清除地图并重新绘制标记。
这是我的OnMarkerClickListener:
@Override
public boolean onMarkerClick(Marker selectedMarker) {
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(hashMarkers.get("the number of the marker"))) {
Marker marker = mMap.addMarker(new MarkerOptions()
.position(selectedMarker.getPosition())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title(selectedMarker.getTitle())
.snippet(selectedMarker.getSnippet()));
mMap.setInfoWindowAdapter(new CustomWindowAdapter(getLayoutInflater()));
marker.showInfoWindow();
return true;
} else {
return false;
}
}
});
}
当我点击一个标记时,我看到infowindow几毫秒,然后消失。这是因为单击标记时相机会刷新。
我尝试在OnMarkerClick中重新创建标记及其infowindow(如上所示),但它不起作用。
我有什么方法可以
仅阻止我点击的标记被清除,或
重绘我点击的标记并显示其信息窗
如果这是一个糟糕的问题,我很抱歉,但我对编程(和StackOverflow)很陌生。 任何给予的帮助将不胜感激。
答案 0 :(得分:1)
在从地图中清除标记后,将代码重绘为标记。您可以使用gloabal变量中的属性保存单击标记的位置。
修改强>
@Override
public boolean onMarkerClick(Marker selectedMarker) {
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
savedPosition=selectedMarker.getPosition();
savedTitle=selectedMarker.getTitle();
savedSnippet=selectedMarker.getSnippet();
// anything else part of your code..
}
});
}
在map.clear()之后添加以下内容:
if(savedPosition!=null && savedTitle!=null && savedSnippet!=null){
Marker marker = mMap.addMarker(new MarkerOptions()
.position(savedPosition)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title(savedTitle)
.snippet(savedSnippet));
marker.showInfoWindow();
}