
我从谷歌的FragmentsTab例子开始.这显示了如何使用片段作为选项卡内容,但TabHost本身仍然托管在一个活动中.再次,我需要将标签主机托管在片段中.
我拿了FragmentsTab示例,并将代码移入onCreate()并将其移动到我的Fragment中的onCreateVIEw(),
@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { VIEw fragmentVIEw = inflater.inflate(R.layout.detail_fragment,container); mTabHost = (TabHost) fragmentVIEw.findVIEwByID(androID.R.ID.tabhost); mTabHost.setup(); mTabManager = new TabManager(getActivity(),mTabHost,R.ID.realtabcontent); // Todo: localize mTabManager.addTab(mTabHost.newTabSpec("info").setIndicator("file Info"),InfoFragment.class,null); return fragmentVIEw;} 当我跑,我得到这个例外,
05-25 14:42:27.272: E/AndroIDRuntime(4701): Caused by: java.lang.IllegalStateException: Recursive entry to executePendingTransactions05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1343)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:429)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.TabManager.onTabChanged(TabManager.java:116)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.invokeOnTabchangelistener(TabHost.java:359)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.setCurrentTab(TabHost.java:344)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.addTab(TabHost.java:216)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.TabManager.addTab(TabManager.java:92)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.DetailFragment.onCreateVIEw(DetailFragment.java:46)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:819)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1053)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1371)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:429)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.TabManager.onTabChanged(TabManager.java:116)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.invokeOnTabchangelistener(TabHost.java:359)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.setCurrentTab(TabHost.java:344)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.Widget.TabHost.addTab(TabHost.java:216)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.TabManager.addTab(TabManager.java:92)05-25 14:42:27.272: E/AndroIDRuntime(4701): at com.zimbra.octopus.androID.DetailFragment.onCreateVIEw(DetailFragment.java:46)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:819)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1032)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1111)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.support.v4.app.FragmentActivity.onCreateVIEw(FragmentActivity.java:264)05-25 14:42:27.272: E/AndroIDRuntime(4701): at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:563)
看着跟踪,我看到onCreateVIEw()用于DetailFragment(托管TabHost的片段)递归调用.不知何故,对TabManager.addTab()的调用(再次参见FragmentsTab示例)导致对DetailFragment.onCreateVIEw()的递归调用.
我究竟做错了什么?这有可能吗?
谢谢.
以上是内存溢出为你收集整理的android:tabhost在一个片段中,w /片段作为标签全部内容,希望文章能够帮你解决android:tabhost在一个片段中,w /片段作为标签所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)