解決APP中fragment重疊問題


      由於內存重啟,導致的frgament重疊,其原因就是FragmentState沒有保存Fragment的顯示狀態,即mHidden,導致頁面重啟后,該值為默認的false,即show狀態,所以導致了Fragment的重疊。

那么解決方案就是自己寫一些代碼去保存fragment的顯示狀態。

      當發生內存重啟的時候,fragment會觸onSaveInstanceState方法,那么我們可以在這個方法內部去保存當前狀態,然后在onCreate中進行取值回復,代碼如下:

public class BaseFragment extends Fragment {
    private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    ...
    if (savedInstanceState != null) {
        boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);

        FragmentTransaction ft = getFragmentManager().beginTransaction();
        if (isSupportHidden) {
            ft.hide(this);
        } else {
            ft.show(this);
        }
        ft.commit();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden());
    }
}

參考開源項目:https://github.com/YoKeyword/Fragmentation

參考文章:

  • Fragment全解析系列(一):那些年踩過的坑

    http://www.jianshu.com/p/d9143a92ad94

  • Fragment全解析系列(二):正確的使用姿勢

    http://www.jianshu.com/p/fd71d65f0ec6

  • Fragment之我的解決方案:Fragmentation

       http://www.jianshu.com/p/38f7994faa6b

  • Android Fragment 你應該知道的一切

       http://blog.csdn.net/lmj623565791/article/details/42628537

 


免責聲明!

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



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