非法状态异常:否 activity FragmentManager.java

IllegalStateException: No activity FragmentManager.java

我正在使用 Eclipse 编译应用程序,我曾经遇到过这个错误,但不是很多。但是自从我切换到 android studio 后,我经常遇到这种崩溃。几乎每台设备都会崩溃。我已尝试做所有事情,但似乎无法解决此问题。我试过同时使用 getfragmentManager() 和 getSupportFragmentManager(),但两者都发生了崩溃。不确定现在该做什么?

下面是我用来切换片段的代码。

private void showFragment(Fragment fragment){
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
if (!fragment.isAdded()) {
        fragmentTransaction.replace(R.id.home_frame, fragment).commitAllowingStateLoss();
        currentFragment = fragment;
    }
}

我所有的片段都扩展了一个基本片段,该片段具有以下代码

private static final Field sChildFragmentManagerField;

static {
    Field f = null;
    try {
        f = Fragment.class.getDeclaredField("mChildFragmentManager");
        f.setAccessible(true);
    } catch (NoSuchFieldException e) {
        Log.wtf("LOGTAG", "Error getting mChildFragmentManager field", e);
    }
    sChildFragmentManagerField = f;
}

@Override
public void onDetach() {
    super.onDetach();

    if (sChildFragmentManagerField != null) {
        try {
            sChildFragmentManagerField.set(this, null);
        } catch (Exception e) {
            Log.e("LOGTAG", "Error setting mChildFragmentManager field", e);
        }
    }

}

请帮忙。我在商店中收到大量崩溃和差评。

下面是我的堆栈跟踪

Fatal Exception: java.lang.IllegalStateException: No activity
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1054)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1049)
   at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1871)
   at android.app.Fragment.performActivityCreated(Fragment.java:2067)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:912)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
   at android.app.BackStackRecord.run(BackStackRecord.java:833)
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1454)
   at android.app.FragmentManagerImpl.run(FragmentManager.java:447)

好吧,我到处搜索都找不到修复程序。 但是进行以下两个更改我能够解决问题。

首先,我没有每次都将 getChildFragmentManager() 作为参数传递,而是在应用程序 class 中创建了一个对象并使用了它。

其次,显然我在同一个片段中使用了 getChildFragmentManager() 两次,即我有两个嵌套的片段。我删除了一个。