今天还是讲解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重叠的原因,做相对的处理, 本次只是提供一种解决办法;