第二次点击标记时隐藏infoWindow(Google Map Android API V2)

Arc*_*ect 16 android google-maps google-maps-android-api-2

为了实现这一点,我觉得我只需要覆盖onMarkerClick并检查点击标记的infoWindow是否已经打开,但令我惊讶的是clickedMarker.isInfoWindowShown()总是返回false ...

我的代码:

@Override
public boolean onMarkerClick(final Marker clickedMarker) {
    if(clickedMarker.isInfoWindowShown()) {
        clickedMarker.hideInfoWindow();
        System.out.println("was showing");
    } else {
        clickedMarker.showInfoWindow();
        System.out.println("not showing");
    }
}
Run Code Online (Sandbox Code Playgroud)

它总是告诉我infoWindow"没有显示"这是不对的......我可以通过保留参考来解决这个问题,userLastClickedMarker但我想知道上面我做错了什么.

谢谢!

编辑:

我更改了代码以调试此问题:

    System.out.println(clickedMarker.isInfoWindowShown());
    if(clickedMarker.isInfoWindowShown()) {
        clickedMarker.hideInfoWindow();
        System.out.println(" showing");
    } else {
        clickedMarker.showInfoWindow();
        System.out.println("not showing");
    }
    System.out.println(clickedMarker.isInfoWindowShown());
Run Code Online (Sandbox Code Playgroud)

我发现isInfoWindowShown()在onMarkerClick方法中可以正常工作但不会正确"记住"它.而且我发现有人已经指出这是一个错误......

https://code.google.com/p/gmaps-api-issues/issues/detail?id=5408

RN3*_*ick -1

我为显示/隐藏信息窗口创建了此代码。

\n\n
enter code here\n\nprivate boolean infoWindowIsShow = false;\nprivate Marker lastMarker;\n\nprivate class MarkerClickListener implements GoogleMap.OnMarkerClickListener {\n    @Override\n    public boolean onMarkerClick(Marker marker) {\n\n        //\xd0\xbe\xd0\xb1\xd1\x80\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x82\xd0\xba\xd0\xb0 \xd0\xb2\xd1\x8b\xd0\xb2\xd0\xbe\xd0\xb4\xd0\xb8\xd1\x82\xd1\x8c/\xd0\xbd\xd0\xb5 \xd0\xb2\xd1\x8b\xd0\xb2\xd0\xbe\xd0\xb4\xd0\xb8\xd1\x82\xd1\x8c \xd0\xb8\xd0\xbd\xd1\x84\xd0\xbe\xd0\xb2\xd0\xb8\xd0\xbd\xd0\xb4\xd0\xbe\xd0\xb2\n        if(lastMarker == null){\n            marker.showInfoWindow();\n            lastMarker = marker;\n            infoWindowIsShow=true;\n        }else\n        if (marker.getId().equals(lastMarker.getId())) {\n            if (infoWindowIsShow) {\n                marker.hideInfoWindow();\n                infoWindowIsShow = false;\n            } else {\n                marker.showInfoWindow();\n                infoWindowIsShow = true;\n            }\n        }\n        else{\n            //\xd1\x8d\xd1\x82\xd0\xbe \xd1\x89\xd0\xb5\xd0\xbb\xd1\x87\xd0\xbe\xd0\xba \xd0\xbf\xd0\xbe \xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xbe\xd0\xbc\xd1\x83 \xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb5\xd1\x80\xd1\x83\n            if (infoWindowIsShow) {//\xd0\xb5\xd1\x81\xd0\xbb\xd0\xb8 \xd0\xbe\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82\xd0\xbe \xd0\xb8\xd0\xbd\xd1\x84\xd0\xbe\xd0\xb2\xd0\xb8\xd0\xbd\xd0\xb4\xd0\xbe\xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb4\xd1\x8b\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb5\xd1\x80\xd0\xb0, \xd1\x81\xd0\xba\xd1\x80\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd0\xbc \xd0\xb5\xd0\xb3\xd0\xbe\n                lastMarker.hideInfoWindow();\n                //\xd0\xb8 \xd0\xbe\xd1\x82\xd0\xbe\xd0\xb1\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb0\xd0\xb5\xd0\xbc \xd0\xb4\xd0\xbb\xd1\x8f \xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb3\xd0\xbe\n                marker.showInfoWindow();\n                infoWindowIsShow = true;\n                lastMarker = marker;\n            } else {\n                marker.showInfoWindow();\n                infoWindowIsShow = true;\n                lastMarker = marker;\n            }\n        }\n        return true;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

mMap.setOnMarkerClickListener(new MarkerClickListener());

\n