【发布时间】:2012-01-25 23:09:29
【问题描述】:
我的应用很简单。我有一个主要活动,底部有一个停靠栏,有 4 个图标:A、B、C、D。
当应用程序启动时,图标 A 处于活动状态,其内容显示在屏幕上。 A 的内容是一个包含 3 个屏幕的 ViewPager,您可以通过水平滑动来更改这些屏幕。
所以我的主要活动是一个 FragmentActivity,它有一个“内容”框架布局和一个“停靠”片段。因此,framelayout 会使用 viewpager 进行膨胀。
问题是,我的 ViewPager 包含 3 个片段。因此,这 3 个片段嵌套在内容片段中。如果我尝试用另一个 Fragment 替换内容 Fragment(即 ViewPager)(例如用户单击 Dock 中的图标 B),它会崩溃,因为 Android 不支持嵌套 Fragments。
我尝试将主要活动更改为 TabActivity,以便将 3 个 Fragment 嵌套到一个活动而不是一个 Fragment。很好用。
除了 TabActivity 已弃用,建议我使用... Fragments!
这里可以做什么?
编辑:让我粘贴堆栈跟踪
01-26 00:03:41.167 E/AndroidRuntime(32723): java.lang.IllegalStateException: 指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.view.ViewGroup.addViewInner(ViewGroup.java:3344) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.view.ViewGroup.addView(ViewGroup.java:3215) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.view.ViewGroup.addView(ViewGroup.java:3172) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.view.ViewGroup.addView(ViewGroup.java:3152) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:874) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.os.Handler.handleCallback(Handler.java:605) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.os.Handler.dispatchMessage(Handler.java:92) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.os.Looper.loop(Looper.java:137) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 android.app.ActivityThread.main(ActivityThread.java:4340) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 java.lang.reflect.Method.invokeNative(Native Method) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 java.lang.reflect.Method.invoke(Method.java:511) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 01-26 00:03:41.167 E/AndroidRuntime(32723): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 01-26 00:03:41.167 E/AndroidRuntime(32723): at dalvik.system.NativeStart.main(Native Method)
Edit2:更多代码
在 xml 中我有一个 FrameLayout
在我的主要活动 onCreate:
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.main_contents, new HomeFragment());
ft.commit();
所以 ViewPager 没有在 XML 中实现,而是以编程方式添加到 FrameLayout 中。
当我尝试创建 .replace()s 与 new SurvivalFragment() 的 R.id.main_contents 的新事务时发生崩溃
【问题讨论】: