當使用add()和 hide()操做fragment時候,fragment 只是設爲gone的狀態,並無被銷燬,因此會出現當Activity被回收時重啓後fragment重疊問題。咱們都知道FragmentActivity被銷燬時會執行java
onSaveInstanceState(Bundle outState)
可是系統並無給咱們保存Fragment的顯示狀態 isHidden()ide
因此咱們能夠手動維護一個mHidden便可。 在onSaveInstanceState()中設置fragment的mHidden狀態,最後再在onCreate()中取出便可。直接上代碼,我已經把它封裝在了一個baseFragment中了this
@Override public void onCreate(@Nullable Bundle savedInstanceState) { Log.d(TAG,"onCreate"); super.onCreate(savedInstanceState); if(savedInstanceState!=null){ boolean flag = savedInstanceState.getBoolean("flag"); FragmentTransaction transaction = getFragmentManager().beginTransaction(); if(flag){ // 若是隱藏掉, transaction.show(this); }else{ transaction.hide(this); } transaction.commit(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d(TAG,"isHidden---" + isHidden()); outState.putBoolean("flag",isHidden()); }