Fragment 重叠问题的原因及解决办法

    今天还是讲解Fragment, Fragment是每一个APP必不可少的东西,他的坑也很多,所以今天就为程序员们说一下Fragment重叠问题的坑。

   很多人都使用过Fragment,简单的使用是最基本的。可是什么是Fragment重叠是什么?

  说一个应用场景:在一个activity中有四个Fragment,当我们在切换其他activity时,在别的app停留太长时间时,回到这个Activity中;

就会出现Fragment重叠;

   重叠的原因是什么?

当系统内存不足,Fragment的宿主activity回收的时候,但是Fragment并没有被回收,activity被系统回收时会调用onSaveInstanceState()方法保存状态,此时的FragmentTransaction中的相当于再次add()了Fragment进去,hide()和show()方法对之前保存的Fragment已经失效,所以就出现了重叠
总结原因可以分为三点:
1.系统内存不足 activity被回收
2.重写onSaveInstanceState()保存状态
3,fragment 状态会是默认show()
造成fragment重叠

解决办法是什么?
在fragment基类中 把状态进行保存
通过保存的状态 fragment子类会进行相应的显示隐藏
以下是代码:
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());
}
}

以上是解决的办法,但是解决的办法不是唯一的,我们可以根据造成Fragment重叠的原因,做相对的处理,
本次只是提供一种解决办法;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值