当使用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()); }