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

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

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

解决:

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

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

思路二:前面说过的4.4的设备运行没有问题,难道是版本问题?虽说gone,是让控件不占空间,但是这并不是问题的关键,真不知从何下手。

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

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

    @Override
public void onResume() {
mMapView.setVisibility(View.VISIBLE);
// MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
mMapView.onResume();
super.onResume();
Log.i("yanqiong", "onResume===="+remBaiduMap);
baiduMapHandler.postDelayed(baiduMapRunnable, 900);
}
    Handler baiduMapHandler=new Handler();
Runnable baiduMapRunnable=new Runnable() { @Override
public void run() {
if(isShowBaiduMap){
webView.setVisibility(View.GONE);
mMapView.setVisibility(View.VISIBLE);
}else{
webView.setVisibility(View.VISIBLE);
mMapView.setVisibility(View.GONE);
}
baiduMapHandler.removeCallbacks(this);
}
};

Android百度地图 关于visibility="gone"的奇葩问题的更多相关文章

  1. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  2. Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  3. Android百度地图(二)结合方向传感器我们自己定位哪里走

    Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...

  4. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  5. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  6. Android 百度地图API(01)_开发环境 HelloBaiduMap

    转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...

  7. Android百度地图相关内容汇总

    Android百度地图知识讲解 1.百度地图开发环境搭建    http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程    h ...

  8. android 百度地图开发实例(转载)

    因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...

  9. Android 百度地图 简单实现--- 美食搜索

    Android 百度地图 简单实现---  美食 依赖包: 加入 Android 百度依赖包: 1  key:  <!--        开发人员 key --> <meta-dat ...

随机推荐

  1. 深入浅出 妙用Javascript中apply、call、bind

    apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...

  2. WebP 原理和 Android 支持现状介绍(转)

    本文为腾讯Bugly开发者社区 投稿,作者:soonlai,版权归原作者所有,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/582939577ef9c5b70855 ...

  3. java异常处理

    try{}catch(){}中的代码与外部代码之间有一定的逻辑关系,需要考虑到如果抛出异常的情况下,外部代码是否可以执行. 在需要捕获异常前尽量不要代入非异常代码,捕获后相关的代码放在一起.

  4. PHP Strict Standards:问题解决

    异常信息: ( ! ) Strict standards: Declaration of SugarEmailAddress::save() should be compatible with tha ...

  5. Curator Framework的基本使用方法

    Curator Framework提供了简化使用zookeeper更高级的API接口.它包涵很多优秀的特性,主要包括以下三点: 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题: ...

  6. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  7. Base 64 编码

    原创地址:http://www.cnblogs.com/jfzhu/p/4020097.html 转载请注明出处 (一)Encoding VS. Encryption 很多人都以为编码(Encodin ...

  8. linux split 及优化

    split 虽然不好用, 但是还是可以用一下的! 有两个方式拆分, 按固定的行数, 按固定的大小. 默认是 1000 行, 后缀长度为2, 后缀长度N是说, 分片从N个字母/数字 的最小值 到 其最大 ...

  9. 【原】安装Win7和Ubuntu双系统后,Win7耳机无声音的解决办法

    最近安装了Ubuntu的桌面版,作成了双系统,可是发现了一个问题:进入Win7后有时插耳机会没有声音,外放有声音.后来更新驱动也没有解决问题,最后在网上查到了解决办法. 产生原因:进入Ubuntu后, ...

  10. 关于如何在github上创建团队开发环境

    今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...