0

ここにリストされているように、私は ActionBar.TabListener を使用しています: アクションバーはタブを自動的に切り替えます:

次のように、tablistener を使用していくつかのタブを追加しています

タブ 1 -> フラグメント a -> フラグメント b -> フラグメント c タブ 2 -> フラグメント d

タブ 1 をクリックして、a から b、c に移動します。タブ 1 にとどまり、'a' にいる場合、クリックして戻ると b に移動し、b に戻るをクリックすると 'a' に移動します。これは、b と c に addtoBackStack() を追加したためです。

しかし、私が Fragent 'c' にいるとき。タブ 2 をクリックし、タブ 1 に戻ってクリックすると、空白の白いタブが表示されます。

ドキュメントに従って ft.attach() がビューを再作成するため、これは予想されるようです。

これまでに試したこと: * fragmentTransaction を使用して、tablistener の onselected() メソッドで明示的に「a」をバックスタックに追加しました。

タブ 2 に移動する前にタブ 1 のビュー階層を保持し、タブ 1 に戻ったときに階層を再作成して、タブ C にいるときにタブ B と A に移動できるようにするにはどうすればよいですか?

編集:(質問にタグフラグメントも追加)タブ2から来た後にタブ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

This was asked a while ago, but you can try implementing your own TabListener and do a FragmentTransation.show() in onTabSelected() and a FragmentTransaction.hide() in onTabUnselected().

于 2014-03-09T02:54:45.417 に答える