我也有同样的问题。
在一项活动中,我有 3 个按钮可以用 transaction.replace(...) 切换片段
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_tablet_paneau, mLigneMessageFragment);
其中一个片段包含一个带有自定义 FragmentPagerAdapter 的 ViewPage。因此,我必须执行 getChildFragmentManager() 以允许嵌套片段。
构造函数在这里:
public LignePagerAdapter(Fragment ligneMessageTabletFragment) {
super(ligneMessageTabletFragment.getChildFragmentManager());
}
所以我有同样的错误:这个片段的第一次显示工作,但是当我显示其他片段并返回这个片段时,我得到了这个异常:
02-26 11:57:50.798: D/ACRA(776): 等待 Toast + worker 结束。杀死应用程序?真的
02-26 11:57:50.798: E/AndroidRuntime(776): 致命异常: main
02-26 11:57:50.798: E/AndroidRuntime(776): java.lang.IllegalStateException: 没有活动
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1474)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.os.Handler.handleCallback(Handler.java:587)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.os.Handler.dispatchMessage(Handler.java:92)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.os.Looper.loop(Looper.java:132)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 android.app.ActivityThread.main(ActivityThread.java:4126)
02-26 11:57:50.798: E/AndroidRuntime(776): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 java.lang.reflect.Method.invoke(Method.java:491)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
02-26 11:57:50.798: E/AndroidRuntime(776): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
02-26 11:57:50.798: E/AndroidRuntime(776): at dalvik.system.NativeStart.main(Native Method)
02-26 11:57:52.818: I/dalvikvm(776): threadid=4: 对信号 3 做出反应
02-26 11:57:52.818: I/dalvikvm(776): 将堆栈跟踪写入“/data/anr/traces.txt”
因此,我可以重新创建它以解决问题,而不是放置相同的片段实例,但我似乎效率不高。
transaction.replace(R.id.layout_tablet_paneau, LigneMessageTabletFragment.newInstance());