片段当前不在FragmentManager中

时间:2014-06-19 15:19:18

标签: java android android-fragments

我搜索了其他类似帖子,但我没有找到解决问题的方法。

我使用图书馆进行滑动菜单(我知道存在一个"官方解决方案"现在要做到这一点,但无论如何) 所以我有这个FragmentChangeActivity:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // set the Above View
    if (savedInstanceState != null)
        mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent");
    if (mContent == null)
        mContent = new AccueilFragment();   

    // set the Above View
    setContentView(R.layout.content_frame);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, mContent)
    .commit();

    // set the Behind View
    setBehindContentView(R.layout.menu_frame);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.menu_frame, new AppliMenuFragment())
    .commit();

    // customize the SlidingMenu
    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

}

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

public void switchContent(Fragment fragment) {
    mContent = fragment;
    String tag = null;
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, fragment)
    .addToBackStack(tag)
    .commit();
    getSlidingMenu().showContent();
}

从那里,它将在菜单中的项目点击上替换每个片段。它工作正常。问题是,例如:

  • 片段A到 - >片段B
  • 从片段B中单击后退按钮
  • 我再次在片段A上按下主页按钮

我在这里遇到了这个例外:

java.lang.IllegalStateException:Fragment FragmentA当前不在FragmentManager中

我发现问题在于下面的代码是执行的:

getSupportFragmentManager().putFragment(outState, "mContent", mContent);

但我无法弄清楚原因。任何帮助都会令人沮丧!

-----编辑-----

仅当我按下后退按钮然后按下主页按钮时才会发生这种情况。如果我按下主页按钮,getSupportFragmentManager()。putFragment,work juste fine。

我知道在调用savedInstanceState()之后我不能进行任何片段事务但是getSupportFragmentManager()。putFragment()不是一个事务对吗?或者我想念一些东西?我对此并不十分满意。

-----解决方案-----

我仍然不明白为什么getSupportFragmentManager()。putFragment()不可能,但从那里,我删除它并在onCreate中使用findFragmentByTag:         if(savedInstanceState!= null)             mContent = getSupportFragmentManager()。findFragmentByTag(" customtag");         if(mContent == null)             mContent = new AccueilFragment();
它具有完全相同的行为,在旋转时保持状态,并且不再例外,我再回到家里。

1 个答案:

答案 0 :(得分:0)

我从这里得到了这个:Issue with getSupportFragmentManager().putFragment

你无法在onSaveInstanceState之后进行片段交易