一、问题:
手机设置开启不保留活动时,多个fragment切换时,切入后台,再次进来,导致fragment重叠
二、分析:
这是因为切入后台时,activity会被回收、重建,导致所有生命周期重新执行,但是activity中的fragment不会被回收,导致fragment创建多次,引发各种问题
三、解决:
在 Activity 被销毁之前onSaveInstanceState被调用,来保存每个实例的状态,这样就可以保证该状态能够从 onCreate(Bundle) 或者onRestoreInstanceState(Bundle)恢复过来。
利用这一点,可以将数据先保存起来,在界面恢复的时候,拿到保存的数据去处理
四、案例:
1.调用onSaveInstanceState()保存想要保存的数据
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
//保存fragment的索引
outState.putInt(SAVED_CURRENT_ID, currentItemIndex);
}
2.在onCreate或者onRestoreInstanceState中获取到保存的数据
//获取fragment索引
if (savedInstanceState != null) {
currentItemIndex = savedInstanceState.getInt(SAVED_CURRENT_ID);
}
3.在tab切换fragment的时候设置索引 currentItemIndex = index
4.在设置默认数据的时候,设置这个index
五、总结:
解决因为压后台导致的问题,解决思路都是这样,在onSaveInstanceState保存状态,在onCreate或者onRestoreInstanceState恢复状态