0

我正在使用此处列出的 ActionBar.TabListener: Action Bar 自动切换选项卡:

我正在添加一些带有 tablistener 的标签,如下所示

选项卡 1 -> 片段 a -> 片段 b -> 片段 c 选项卡 2-> 片段 d

我点击 Tab 1,从 a 到 b 到 c。当我停留在 Tab 1 并且我在 'a' 中时,单击返回到 b,单击返回到 b 到 'a' 。这是因为我在 b 和 c 中添加了 addtoBackStack()

但是当我在 Fragent 'c' 时。然后单击选项卡 2 并返回选项卡 1 并单击返回,我得到空白的白色选项卡。

这似乎是意料之中的,因为 ft.attach() 根据文档重新创建视图。

到目前为止我已经尝试过: * 在 tablistener 的 onselected() 方法中,使用 fragmentTransaction 将“a”显式添加到 backstack。

如何在转到选项卡 2 之前保留选项卡 1 中的视图层次结构,并在返回选项卡 1 时重新创建层次结构,以便当我在选项卡 C 中时,我可以转到选项卡 B 和 A?

编辑:(还向问题添加了标签片段)在来自 Tab 2 后按 Tab 1 上的后退按钮时,我得到以下堆栈跟踪

W/System.err(26823): java.lang.IllegalStateException: Fragment already added: SearchTab{427a29a8 #1 id=0x1020002 search}
W/System.err(26823):    at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1146)
W/System.err(26823):    at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
W/System.err(26823):    at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1504)
W/System.err(26823):    at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:493)
W/System.err(26823):    at android.app.Activity.onBackPressed(Activity.java:2220)
W/System.err(26823):    at android.app.Activity.onKeyUp(Activity.java:2194)
W/System.err(26823):    at android.view.KeyEvent.dispatch(KeyEvent.java:2782)
W/System.err(26823):    at android.app.Activity.dispatchKeyEvent(Activity.java:2428)
W/System.err(26823):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2076)
W/System.err(26823):    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:4192)
W/System.err(26823):    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:4121)
W/System.err(26823):    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3169)
W/System.err(26823):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(26823):    at android.os.Looper.loop(Looper.java:137)
W/System.err(26823):    at android.app.ActivityThread.main(ActivityThread.java:5328)
W/System.err(26823):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(26823):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(26823):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
W/System.err(26823):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
W/System.err(26823):    at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

0

前一段时间有人问过这个问题,但是您可以尝试实现自己的 TabListener 并在 onTabSelected() 中执行 FragmentTransation.show() 并在 onTabUnselected() 中执行 FragmentTransaction.hide()。

于 2014-03-09T02:54:45.417 回答