activity被杀掉之后,它会通过如下方法把数据缓存下来
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
当再次进入activity时,系统会从savedInstanceState中回复数据,但是我们从activity启动时,会重新初始化FragmentTransaction,相当于再次add fragment,会导致hide()和show()方法失效,下面有两种解决方法:
方法一、在onCreate时,如果savedInstanceState不为空,则我们从savedInstanceState里面拿到保存的fragment,而不再对fragment重新初始化,具体代码如下
@Override
public void onCreate(Bundle savedInstanceState) {
mManager = getSupportFragmentManager();
if (savedInstanceState != null) {
mMainFragment = (MainFragment) mManager.findFragmentByTag("mMainFragment");
mDeviceStateFragment = (DeviceStateFragment) mManager.findFragmentByTag("mDeviceStateFragment");
mUserCenterFragment = (UserCenterFragment) mManager.findFragmentByTag("newsFrg");
}
super.onCreate(savedInstanceState);
}
方法二、禁止系统缓存fragment,这样,当activity重新进入的时候,savedInstanceState中没有缓存,就不会导致fragment冲突的问题了,具体方法如下
@Override
public void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState); // 禁止系统缓存fragment
}
注:以上两个方法都是复写的activity父类中的方法,两个方法不可同时使用