getSupportFragmentManager

getSupportFragmentManager

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

我正在为滑动菜单使用一个库(我知道现在有一个“官方解决方案”可以做到这一点,但无论如何)
所以我有了这个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,就可以了。

我知道在调用saveInstanceStateState()之后我无法进行任何片段事务,但是getSupportFragmentManager()。putFragment()是不正确的事务吗?还是我想念什么?我对此并不完全满意。

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

我仍然不明白为什么getSupportFragmentManager()。putFragment()不可能,但是从那里,我删除了它并在onCreate中使用findFragmentByTag:
        如果(savedInstanceState!= null)
            mContent = getSupportFragmentManager()。findFragmentByTag(“ customtag”);
        如果(mContent == null)
            mContent =新的AccueilFragment();
它具有完全相同的行为,在旋转时保持状态,没有其他异常,我按回去,然后再回家。

最佳答案

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

您不能在onSaveInstanceState之后进行片段事务

关于java - Fragment当前不在FragmentManager中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24310217/

10-10 19:12