天天看點

Android Fragment中使用hide/show出現頁面重疊、穿透現象

Android Fragment中使用hide/show出現頁面重疊、穿透現象

寫了這麼久的代碼,今天突然發現個問題,在我的項目中,一個主Activity中有三個Fragment,這三個Fragment是通過hide/show來控制隐藏和顯示的,但是,發現,在小米手機上,點選這三個Fragment的時候出現能隐約的看到已經被隐藏的Fragment。還有,在華為手機上,當一個activity奔潰以後重新傳回Fragment的時候,就出現嚴重的界面穿透重疊問題。如圖:

Android Fragment中使用hide/show出現頁面重疊、穿透現象
Android Fragment中使用hide/show出現頁面重疊、穿透現象
Android Fragment中使用hide/show出現頁面重疊、穿透現象

仔細看這三個Fragment,發現界面是亂的,項目中出現的就是這個問題

分析問題:

仔細分析一下,當我從Fragment中跳到其他activity的時候,此時,Fragment所在的activity已經被銷毀,但是通過

@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); }

這個方法來儲存相關狀态和資料。當奔潰以後,再次回到了Fragment所在的activity,此時,該activity就會調用 oncreate方法中,通過該方法中的savedInstanceState參數來恢複Fragment,此時,Fragment中的FragmentTransaction中的相當于又再次add了fragment進去的,之前儲存的fragment也還在。hide()和show()方法對之前儲存的fragment已經失效了。是以出現了重疊的現象。

解決方法如下:

1、 在Fragment中所在的activity中重寫onSaveInstanceState方法,并且把super.onSaveInstanceState(outState); 注釋掉,阻止activity儲存fragment的狀态就可以了,

@Override
    protected void onSaveInstanceState(Bundle outState) {
        //super.onSaveInstanceState(outState);    //将這一行注釋掉,阻止activity儲存fragment的狀态,解決Fragment穿透重疊現象
    }
           

這是最簡單有效的方法。

2、還有一種方法就是在Fragment所在的activity中的oncreate方法中,判斷savedInstanceState是否為null,如果不為null,則表示裡面有儲存這三個fragment。則不再重新去add這三個fragment,而是通過Tag從前儲存的資料中直接去讀取。相關代碼如下:

private FragmentManager fManager;  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    // TODO Auto-generated method stub  
    fManager = getFragmentManager();  
    if (savedInstanceState != null) {  
        businessCenterFragment= (BusinessCenterFragment) fManager.findFragmentByTag("businessCenterFragment");  
        businessMoneyFragment= (BusinessMoneyFragment) fManager.findFragmentByTag("businessMoneyFragment");  
        businessMeFragment= (BusinessMeFragment) fManager.findFragmentByTag("businessMeFragment");              
    }  
    super.onCreate(savedInstanceState);       
}  
           

這種方法仍是對之前儲存的fragment操作,也能解決重疊的問題。

參考資料: http://blog.csdn.net/u014391013/article/details/42497575

https://my.oschina.net/wangxnn/blog/417581