由於內存重啟,導致的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