Android百度地圖 關於visibility="gone"的奇葩問題


最近在項目中遇到一個奇葩問題,花了很長時間,在這里記錄下。

問題描述:我的主界面是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);
        }
    };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM