原因:为什么会出现界面重叠呢?因为每当我们离开Activity的时候,切换到别的APP的时候,当内存不够用,Fragment所在Activity被销毁,会调用onSaveInstanceState()方法,Fragment都会被保存起来,当我再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment,就导致了界面重叠。
解决办法:
1.在进入onCreate函数时,先去判断savedInstanceState是否为null,如果不为null,则表示里面有保存这个fragment。则不再重新去add这个fragment,而是通过Tag从前保存的数据中直接去读取,看一下代码:
public void onCreate(Bundle savedInstanceState) { fManager = getFragmentManager(); if (savedInstanceState != null) { fg1 = (AllOfficialAccountFragment) fManager.findFragmentByTag("fg1"); fg2 = (MovieOfficialAccountFragment) fManager.findFragmentByTag("fg2"); fg3 = (NewsOfficialAccountFragment) fManager.findFragmentByTag("fg3"); fg4 = (OtherOfficialAccountFragment) fManager.findFragmentByTag("fg4"); } super.onCreate(savedInstanceState); }
实例代码:
设置Tag的代码:
transaction.add(R.id.fragment_main, personalFragment,"person");
transaction.add(R.id.fragment_main, homeFragment,"home");
transaction.add(R.id.fragment_main, messageFragment,"message");
onCreate()方法中:
if(savedInstanceState!=null){
personalFragment= (PersonalFragment) fragmentManager.findFragmentByTag("person");
homeFragment= (HomeFragment) fragmentManager.findFragmentByTag("home");
messageFragment= (MessageFragment) fragmentManager.findFragmentByTag("message");
}