天天看点

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

继续阅读