我的应用很简单。我有一个主要活动,底部有一个底座,有4个图标:A,B,C,D。
当应用程序启动时,图标A处于活动状态,其内容将显示在屏幕上。 A的内容是一个包含3个屏幕的ViewPager,您可以通过水平滑动来更改这些屏幕。
所以我的主要Activity是FragmentActivity,它有一个“内容”framelayout和一个“dock”片段。因此,framelayout用viewpager充气。
问题是,我的ViewPager包含3个片段。因此,这3个片段嵌套在内容片段中。如果我尝试用另一个片段替换内容Fragment(即ViewPager)(比如用户点击了Dock中的图标B),它会崩溃,因为Android不支持嵌套片段。
我尝试将主要活动更改为TabActivity,以便将3个片段嵌套到活动而不是片段中。这很好用。
除了不推荐TabActivity之外,我建议使用......片段!
这里可以做些什么?
编辑:让我粘贴堆栈跟踪
01-26 00:03:41.167 E/AndroidRuntime(32723): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addViewInner(ViewGroup.java:3344) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3215) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3172) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3152) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:874) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Handler.handleCallback(Handler.java:605) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Handler.dispatchMessage(Handler.java:92) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Looper.loop(Looper.java:137) 01-26 00:03:41.167 E/AndroidRuntime(32723): at android.app.ActivityThread.main(ActivityThread.java:4340) 01-26 00:03:41.167 E/AndroidRuntime(32723): at java.lang.reflect.Method.invokeNative(Native Method) 01-26 00:03:41.167 E/AndroidRuntime(32723): at java.lang.reflect.Method.invoke(Method.java:511) 01-26 00:03:41.167 E/AndroidRuntime(32723): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 01-26 00:03:41.167 E/AndroidRuntime(32723): at 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()
R.id.main_contents
new SurvivalFragment()
答案 0 :(得分:1)
好消息,嵌套片段现在是Jelly Bean中的supported和最新的支持包
答案 1 :(得分:0)
对不起在搜索了一下之后,我发现了这个:Error swapping / adding an XML Fragment
我只需要将inflate的最后一个参数设置为false。我的坏。
编辑:我还在寻找更好的选择。我正在使用已弃用的TabActivity。我真的想使用Fragments API,但我无法做我需要做的事情。