【问题标题】:Impossible to restore fragment无法恢复碎片
【发布时间】:2017-01-04 19:59:18
【问题描述】:

我无法恢复我的片段!

我正在保存:

@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 上我有一个空实例...

求救!

【问题讨论】:

  • 你在CameraFragment上打过setRetainInstance(true)吗?
  • 同样的事情(我已经将 setRetainInstance(true) 放在我的片段的 onCreateView() 上...)

标签: android


【解决方案1】:

需要在onRestoreInstanceState中恢复保存的fragment

public void onRetoreInstanceState(Bundle inState){
   cameraFragment = getFragmentManager().getFragment(inState,"cameraFrameLayout");
}

还要注意 getFragment 被调用到 FragmentManager,而不是 findFragmentByTag。希望能帮助到你!

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

【讨论】:

    【解决方案2】:

    在你的片段 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 在您的情况下可能会有所不同。这是您要加载片段的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多