如何在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
一切正常,但问题是,当应用程序在一个空屏幕上启动时,只有选项卡Tab1和Tab2。例如,某些活动的片段仅在用户单击Tab2时出现。当他再次点击Tab1时,Tab1的片段会正常出现

我希望Tab1的片段在应用程序启动时立即启动,但我不知道如何实现这一点


有什么想法吗听起来像是碎片交易问题。但我需要查看主活动的代码


我假设您正在使用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();