Android Fragment 重叠问题

缘起

首先,笔者的主Activity中包含了多个Fragment,通过show、hide来切换展示。当笔者切换到其他的APP,操作一段时间后,返回到当前APP,有很大几率会出现Fragment重叠现象。

缘由

首先,在Activity的生命周期中,当Activity不在前台展示时,如果此时其他的APP需要使用内存,系统会杀掉该APP的进程,当用户重新进入该APP时,系统会重新创建Activity。

Activity不在前台展示时会保存Fragment的状态,当系统重新创建Activity时会恢复之前保存的Fragment的状态。

缘解

方案一:在Activity的onCreate方法中判断savedInstanceState是否为空,不为空则使用系统保存的Fragment。

public class MainActivity extends AppCompatActivity {
    Fragment fragment;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            fragment = getSupportFragmentManager().findFragmentByTag("fragment");
        } else {
            fragment = new Fragment();
            getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, fragment, "fragment").commit();
        }
    }
}

方案二:在Activity的onCreate方法中,调用super方法时直接传null,不使用保存的状态。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(null);
}

参考资料:

Android fragment 重叠问题——通过hide,show方式导致的解决方法

解决Activity重新刷新后Fragment的show、hide失效问题

深入理解Activity的生命周期

发表评论