如果不想看分析,可以直接复制代码取用(亲测有效)
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (!marker.isInfoWindowShown()){
marker.setInfoWindowEnable(true);
marker.showInfoWindow();
}else {
marker.hideInfoWindow();
marker.setInfoWindowEnable(false);
}
return false;
}
});
代码段1
分析:
我们很容易想到如下程序:if和else语句
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (!marker.isInfoWindowShown()){
// marker.setInfoWindowEnable(true);
marker.showInfoWindow();
}else {
marker.hideInfoWindow();
// marker.setInfoWindowEnable(false);
}
return false;
}
});
代码段2(代码段1注释了两行)
分析:
但是结果是一直无法隐藏infowindow,为什么呢?
因为return false这步并不是简单的返回false(通过打断点就能验证),还调用了c.class的函数,如下:
private boolean e(MotionEvent var1) throws RemoteException {
.........
this.showInfoWindow((cu)var3);
.........
}
这部分会再次显示infowindow,从而导致无法隐藏infowindow。
我们尽量不要修改系统定义好的类,防止出现其他bug。
所以就直接取消显示的权限,就能保证正常实现功能了。
这只是我的个人分析,如果问题,希望大家能够讨论指正。