活动在后台死亡时保留碎片

时间:2014-10-15 13:09:08

标签: android android-fragments

在我的申请中,我有一个活动。该活动有5个片段。每个片段占据整个窗口,任何时候只会显示其中一个片段。

从第五个片段我打开相机拍照。由于我打开相机,在某些手机中,活动被杀死并重新创建。

拍摄照片后,结果将显示在新创建的活动中。但由于这是一个新创建的,这个显示第一个片段而不是第五个片段。

如何在保持状态的情况下显示第五个片段?只有在配置更改时重新创建了Activity时,setRetainInstance才有用。

主要问题是,当时活动娱乐,那些碎片'调用默认构造函数并导致所有片段的重复实例。

2 个答案:

答案 0 :(得分:1)

尝试在onSaveInstanceState()中保存片段状态,并在onCreate内部使用它来恢复状态。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    getSupportFragmentManager().putFragment(outState, "fragment", currentFragment);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
        // Load saved fragment or values you want
        currentFragment = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
    } else {
        // your code to initialize all the fragments (App Launch case)
    }
}

这仍将保持状态,并将回调onActivityResult。

答案 1 :(得分:0)

How can I show the fifth Fragment with maintaining its state? setRetainInstance is useful only if the Activity got recreated on configuration changes.

作为提到的答案之一,您可以仅使用索引并将其保存在onSaveInstanceState中,然后在以后使用。

The main problem is, at that time Activity recreation, those fragments' default constructor gets called and resulting in duplicate instance of all fragments.

它是默认行为。系统破坏了您的片段,系统将使用默认构造函数再次创建它们。如果您还创建新的片段,则会发生重复。为避免这种情况,只需检查片段管理器中是否已存在片段。

例如

if(getSupportFragmentManager().findFragmentByTag(tag5th) == null)
    create your fragment and add in fragment transaction
else
    use this fragment from fragment manager