Android& Google地图 - 关闭信息窗口,带后退按钮

时间:2014-08-21 14:41:52

标签: android google-maps-markers google-maps-android-api-2

我有一个活动,其中包含一个包含谷歌地图视图的片段。 App为MapView添加了几十个标记,使用MarkerManager和ClusterRenderer形成集群。

问题是当我打开标记的InfoWindow并按下硬件后退按钮时,它会关闭应用程序。而不是那样,我想让InfoWindow关闭。

有没有直接的方法来实现这个目标?

2 个答案:

答案 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
        }
    });