import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; public class FragmentBase extends Fragment { private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { boolean isHide = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN); FragmentTransaction ft = getFragmentManager().beginTransaction(); if (isHide) { ft.hide(this); } else { ft.show(this); } ft.commit(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); } }
public class MainActivity ... { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { ... // 这里一定要在save为null时才加载Fragment,Fragment中onCreateView等生命周里加载根子Fragment同理 // 因为在页面重启时,Fragment会被保存恢复,而此时再加载Fragment会重复加载,导致重叠 if(saveInstanceState == null){ // 这里加载根Fragment } } }
【每次退到后台的时候,都状态保存下,重新启动(非第一次重启)时候,就可以恢复状态,避免重叠】
【源码这里下载】
https://github.com/zgxzgxzg/openSource.git