无法恢复片段

时间:2017-01-04 11:45:36

标签: android

我无法恢复我的片段!

我正在保存:

@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
    if(cameraFragment != null && cameraFragment.isAdded())
        getSupportFragmentManager().putFragment(savedInstanceState, "cameraFrameLayout", cameraFragment);

    super.onSaveInstanceState(savedInstanceState);
}

并在onCreate(savedInstanceState)中恢复:

    if(savedInstanceState == null)
        cameraFragment = CameraFragment.newInstance();
    else
        cameraFragment = (CameraFragment) getSupportFragmentManager().findFragmentByTag("cameraFrameLayout");

当我更改设备方向时,我可以成功地看到使用我的片段调用的onSaveInstanceState但是在onCreate上我有一个空实例...

寻求帮助!

2 个答案:

答案 0 :(得分:0)

您需要在onRestoreInstanceState

中恢复已保存的片段
public void onRetoreInstanceState(Bundle inState){
   cameraFragment = getFragmentManager().getFragment(inState,"cameraFrameLayout");
}

另请注意,如果 findFragmentByTag ,则 getFragment 会调用 FragmentManager 。希望能帮助到你!

注意:在onSaveInstanceState和onRestoreInstanceState覆盖中调用超级方法

答案 1 :(得分:0)

在你的片段onCreate()方法中写setRetainInstance(true);

在创建片段的Activity中,您应该执行类似这样的操作

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

    if (savedInstanceState == null)
    {
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
            .replace(android.R.id.content, CameraFragment.newInstance())
            .commit();
    }
}

android.R.id.content可能与您的情况不同。这是您要加载片段的位置。