如何在Android屏幕内使用标签运行fragment?
我有一个有两个选项卡的屏幕,对于每个选项卡,我试图用不同的布局运行不同的片段 我目前有以下情况:如何在Android屏幕内使用标签运行fragment?,android,android-layout,tabs,android-fragments,android-activity,Android,Android Layout,Tabs,Android Fragments,Android Activity,我有一个有两个选项卡的屏幕,对于每个选项卡,我试图用不同的布局运行不同的片段 我目前有以下情况: MainFragmentActivity-扩展FragmentActivity的Activity MainFragment_屏幕-用于MaiFragmentActivity的XML Fragment1-用户单击选项卡1时的活动 fragmnet1_screen-用于此的XML Fragment2-用户单击Tab2时的活动 fragment2_屏幕-用于此的XML 一切正常,但问题是,当应用程序在
- MainFragmentActivity-扩展FragmentActivity的Activity
- MainFragment_屏幕-用于MaiFragmentActivity的XML
- Fragment1-用户单击选项卡1时的活动
- fragmnet1_screen-用于此的XML
- Fragment2-用户单击Tab2时的活动
- fragment2_屏幕-用于此的XML
有什么想法吗听起来像是碎片交易问题。但我需要查看主活动的代码
我假设您正在使用FragmentTransactions.add和FragmentTransaction.replace将它们移入移出。解决方案是在添加所有选项卡后,这需要在onCreate()中完成:
hashMapTab是所有选项卡的TabInfo的哈希映射。TabInfo是所有选项卡数据的容器,如选项卡的类名和标记。Hm。。。我使用fragment.attach、fragment.detach和fragment.commit来完成。所以,每次点击标签后,应用程序都会检查是否选中了新标签。如果选择了新选项卡,则删除旧片段并附加新片段。如果选择的是旧选项卡,则不会发生任何事情。当用户单击tab时,一切正常,但我不喜欢应用程序启动时出现空屏幕。tabInfo.fragment=this.getSupportFragmentManager()findFragmentByTag(“Tab1”);FragmentTransaction fragment=this.getSupportFragmentManager().beginTransaction();fragment.attach(tabInfo.fragment);fragment.commit();好的,那么可能是因为您没有在加载时设置当前选项卡?TabHost.setCurrentTab(mCurrentTab);这将设置选项卡,但仍然不会设置该选项卡的内容。真奇怪。它只会将标签标记为按下,但用户仍需要再次按tab键来显示内容。然后,您就可以决定显示哪些标签内容。换句话说,您可能只是处理用户信息,而不是tabhost info。tabhost.getCurrentTab()。这要么是您决定何时显示内容的时间问题,要么是您正在处理的“如果用户执行此操作,请附加此片段”,而不是“如果当前选项卡为此,请附加此片段”。再一次,没有看到主要的活动,我只是猜测。
TabInfo activeTab = (TabInfo) this.hashMapTab.get("Tab1");
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
activeTab.fragment = Fragment.instantiate(this,activeTab.className.getName(), activeTab.args);
ft.add(R.id.tab1, activeTab.fragment, activeTab.tag);
ft.attach(activeTab.fragment);
lastTab = activeTab;
ft.commit();