切换标签时,动作条选项卡的空白片段: [英] ActionBar Tab's Fragments blank when switching tabs:

查看:170
本文介绍了切换标签时,动作条选项卡的空白片段:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用ActionBar.TabListener如下所列: 操作栏会自动切换标签:

我加入了一些卡口与tablistener如下:

标签1 - >片段 - >片段B - >片段C 标签2-> D片段

我点击选项卡1,从去到B到C。当我留在标签1,和我在'A',点击回转到B,点击后面的B进入到A。这是因为我在B和C加入addtoBackStack()

但是,当我在FragentC。并点击选项卡2,回到选项卡1,点击后,我拿到空白标签。

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

我已经试过到目前为止: *用于一个fragmentTransaction显式添加'一'在tablistener的onselected()方法来backstack。

  

我怎样才能preserve才去标签2并重新创建层次结构表一回来的时候,这样当我在标签C,我可以去标签B和A的标签1视图层次?

编辑: (还增加了标记片段的​​问题) 我得到了下面的堆栈跟踪时,pressing后退按钮选项卡1由表2

到来后,

  W / System.err的(26823):java.lang.IllegalStateException:碎片已添加:SearchTab {427a29a8#1 ID = 0x1020002搜索}
W / System.err的(26823):在android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1146)
W / System.err的(26823):在android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
W / System.err的(26823):在android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1504)
W / System.err的(26823):在android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:493)
W / System.err的(26823):在android.app.Activity.onBack pressed(Activity.java:2220)
W / System.err的(26823):在android.app.Activity.onKeyUp(Activity.java:2194)
W / System.err的(26823):在android.view.KeyEvent.dispatch(KeyEvent.java:2782)
W / System.err的(26823):在android.app.Activity.dispatchKeyEvent(Activity.java:2428)
W / System.err的(26823):在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchKeyEvent(PhoneWindow.java:2076)
W / System.err的(26823):在android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:4192)
W / System.err的(26823):在android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:4121)
W / System.err的(26823):在android.view.ViewRootImpl $ ViewRootHandler.handleMessage(ViewRootImpl.java:3169)
W / System.err的(26823):在android.os.Handler.dispatchMessage(Handler.java:99)
W / System.err的(26823):在android.os.Looper.loop(Looper.java:137)
W / System.err的(26823):在android.app.ActivityThread.main(ActivityThread.java:5328)
W / System.err的(26823):在java.lang.reflect.Method.invokeNative(本机方法)
W / System.err的(26823):在java.lang.reflect.Method.invoke(Method.java:511)
W / System.err的(26823):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)
W / System.err的(26823):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
W / System.err的(26823):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

这是问前一阵子,但你可以尝试实现自己的TabListener,做一个FragmentTransation.show()的onTabSelected()和FragmentTransaction.hide( )在onTabUnselected()。

I am using ActionBar.TabListener as listed here: Action Bar switching tabs automatically:

I am adding a few tabs with tablistener as follows

Tab 1 -> Fragment a -> fragment b -> Fragment c Tab 2-> Fragment d

I click on Tab 1, go from a to b to c. When I stay on Tab 1, and I am in ‘a’, clicking back goes to b, clicking back in b goes to ‘a’ . This is because I have added addtoBackStack() in b and c

But when I am in Fragent ‘c’. and click on Tab 2 and come back to Tab 1 and click back, I get blank white tab.

This seems to be expected because ft.attach() recreates the view according to the documentation.

What I have tried so far: * Used a fragmentTransaction to explicitly add 'a' to backstack in the tablistener's onselected() method.

How can I preserve the view hierarchy in Tab 1 before going to Tab 2 and recreate the hierarchy when back in Tab 1 so that when I am in Tab C, I can go to Tabs B and A?

EDIT: (also added tag fragments to question) I get the following stack trace when pressing back button on Tab 1 after coming from Tab 2

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)

解决方案

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().

这篇关于切换标签时,动作条选项卡的空白片段:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆