我有一个活动,其中包含一个包含谷歌地图视图的片段。 App为MapView添加了几十个标记,使用MarkerManager和ClusterRenderer形成集群。
问题是当我打开标记的InfoWindow并按下硬件后退按钮时,它会关闭应用程序。而不是那样,我想让InfoWindow关闭。
有没有直接的方法来实现这个目标?
答案 0 :(得分:5)
我设法解决了这个问题。
当InfoWindow即将开启时,我修改了MarkerManager以通过EventBus发送通知:
@Override
public View getInfoContents(Marker marker) {
View content = fillContent();
EventBus.getDefault().post(new MapInfoWindowShownEvent(marker));
return content;
}
我在活动中添加了事件处理:
private Marker mLastShownInfoWindowMarker = null;
@Override
public void onBackPressed() {
if(mLastShownInfoWindowMarker != null && mLastShownInfoWindowMarker.isInfoWindowShown()) {
mLastShownInfoWindowMarker.hideInfoWindow();
} else {
super.onBackPressed();
}
}
public void onEvent(MapInfoWindowShownEvent event) {
mLastShownInfoWindowMarker = event.getMarker();
}
答案 1 :(得分:0)
使用这些信息我决定让自己更简单一点:
private Marker mLastShownInfoWindowMarker = null;
public void setMLastShownInfoWindowMarker(Marker marker)
{this.mActiveMapMarker=marker;}
@Override
public void onBackPressed() {
if(mLastShownInfoWindowMarker != null && mLastShownInfoWindowMarker.isInfoWindowShown()) {
mLastShownInfoWindowMarker.hideInfoWindow();
} else {
super.onBackPressed();
}
}
接下来是你有mapfragment的地方:
private MainActivity activity; // swap this to your activity
public MainActivityMapController(MainActivity activity) {
this.activity = activity;
}
// override markerclicklistener to store lastShownInfoWindowMarker in
// the activity where back button will be used
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
activity.setMLastShownInfoWindowMarker(marker);
return false; // false keeps the standard behavior
}
});