android:visibility="gone",Android百度地图 关于visibility="gone"的奇葩问题 - 好库文摘...

最近在项目中遇到一个奇葩问题,花了很长时间,在这里记录下。

问题描述:我的主界面是ViewPager+Fragment,并且设置缓存了我的4个ViewPager页面。左侧是一个侧滑菜单,点击相应按钮打开不同的Activity。右边的大片区域用的是FrameLayout将自定义地图和百度地图叠加全屏显示。左下角有一个按钮用于切换自定义地图和百度地图的显示,其实就是MapView的visibility="gone"和visibility="visible"的操作。简单画了下效果图:

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

问题来了,我进入该主界面,只要我点击btn进行地图显示的切换过,也就是说百度地图曾经显示过(visible),当我再打开其他activity,Back键返回到该Fragment时,百度地图就显示了,下面的按钮btn也被遮盖掉了,无论我之前是否将它隐藏(gone)掉过。在两个真机Android4.4的设备上运行没有这个情况,在其他Android4.0,4.1的设备上有这个问题,但是将gone换成invisible也不会有这个问题,但是这样的话就达不到我想要的效果了。

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

解决:

思路一:打印从进入到该Fragment,点击按钮,打开activity,back键返回该Fragment这一过程的log:

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

在onStop()中记住百度地图的显示状态(控件MapView),在onResume()中根据保存的值去控制百度地图的显示,获取到的值是正确的,但是控制MapView隐藏的代码缺没有效果。

思路二:前面说过的4.4的设备运行没有问题,难道是版本问题?但是真不知从何下手。

思路三:在百度地图Android API上找到问题原因,这应该是百度地图自身的一个bug(以后还是得细看文档啊)

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

但是即使知道了这个问题,还是不能完美的解决我的问题,最后我的onResume()中延迟了较短的时候,再将百度地图(MapView)隐藏或者显示。

@Overridepublic voidonResume() {

mMapView.setVisibility(View.VISIBLE);//MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()

mMapView.onResume();super.onResume();

Log.i("yanqiong", "onResume===="+remBaiduMap);

baiduMapHandler.postDelayed(baiduMapRunnable,900);

}

Handler baiduMapHandler=newHandler();

Runnable baiduMapRunnable=newRunnable() {

@Overridepublic voidrun() {if(isShowBaiduMap){

webView.setVisibility(View.GONE);

mMapView.setVisibility(View.VISIBLE);

}else{

webView.setVisibility(View.VISIBLE);

mMapView.setVisibility(View.GONE);

}

baiduMapHandler.removeCallbacks(this);

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值