片段重新创建两次

时间:2017-11-30 12:24:59

标签: android android-fragments android-activity android-lifecycle

我尝试恢复活动中的当前片段,因为应用有时会在后台被杀死。我使用putFragment()将当前片段存储在onSaveInstanceState()中,并使用getFragment()中的onRestoreInstanceState()来获取应用程序被杀之前当前片段的已保存实例,这是在托管活动。

MainActivity中的onSaveInstanceState():

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {

    getSupportFragmentManager().putFragment(outState, "fragment", getSupportFragmentManager()
            .findFragmentById(R.id.mainfrag));

    super.onSaveInstanceState(outState, outPersistentState);
}
MainActivity()中的

onRestoreInstanceState():

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    Fragment current = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    if (current instanceof SubCat) {
        current = new SubCat();
    }
    ft.replace(R.id.mainfrag, current); //error-line (MainActivity.java:185)
    ft.addToBackStack(null);
    ft.commit();
}

我使用SubCat()片段进行测试,它只是应用的一个片段,所以当SubCat()片段处于前景/可见时我有意将整个应用放到背景或者让我说我最小化应用程序,一段时间后,当我返回应用程序时,最后一个片段(在这种情况下为SubCat())被恢复,但是我也需要保存片段的一些实例同样。

现在的问题是片段重新创建了两次,首先从cat_id中的包中检索onActivityCreated()的实际值,但是有些如何再次重新创建片段,此时{未调用{1}}使onActivityCreated()的值为null。

片段:

cat_id

我不知道我做错了什么,请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

最后,我通过删除MainActivity中的onSaveInstanceState()onRestoreInstanceState()来解决这个问题。 恢复fragment中的activity并恢复fragment的状态在某种程度上是多余的,这会使onCreateView() fragment两次触发。因此,仅恢复片段状态本身就可以完成工作。