此文章来源于:http://www.cnblogs.com/shuijilove/p/5592439.html
由于内存重启,导致的frgament重叠,其原因就是FragmentState没有保存Fragment的显示状态,即mHidden,导致页面重启后,该值为默认的false,即show状态,所以导致了Fragment的重叠。
那么解决方案就是自己写一些代码去保存fragment的显示状态。
当发生内存重启的时候,fragment会触onSaveInstanceState方法,那么我们可以在这个方法内部去保存当前状态,然后在onCreate中进行取值回复,代码如下:
public class BaseFragment extends Fragment {
private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);
FragmentTransaction ft = getFragmentManager().beginTransaction();
if (isSupportHidden) {
ft.hide(this);
} else {
ft.show(this);
}
ft.commit();
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden());
}
}
参考开源项目:https://github.com/YoKeyword/Fragmentation
参考文章:
- Fragment全解析系列(一):那些年踩过的坑
- Fragment全解析系列(二):正确的使用姿势
- Fragment之我的解决方案:Fragmentation
- Android Fragment 你应该知道的一切
文档信息
- 本文作者:itlgl
- 本文链接:https://itlgl.com/note/2018/05/04/issues-14/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)