如何在FragmentTabHost中创建特定选项卡有多个片段导航,如tabgroup活动

时间:2013-05-15 06:24:13

标签: android android-fragments android-fragmentactivity

我使用FragmentTabHost创建了三个选项卡。现在我需要让所有导航都在标签下。我怎么能得到这个。我需要使用TabGroupActivity得到我们得到的东西。

TAB1    ---> frag1 - > frag2

TAB2    ---> frag3

TAB3    ---> frag4 ---> frag5

我使用过fragmentTransaction.add(),fragmentTransaction.remove(),fragmentTransaction.replace()。这三种方法但没有给出解决方案。

替换方法在现有片段视图的顶部显示新的片段视图。

删除添加,从这两个仅删除的作品,添加不起作用。

提前致谢。

TabHostMain.java

    @Override
    protected void onCreate(Bundle savedInstanceState)
 {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.bottom_tabs);

mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
                mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
            View view;
    view=getTabView(R.drawable.ic_launcher);

    Bundle b = new Bundle();
    b.putString("key", "Simple");
    mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator(view),Fragment1.class, null);

    b = new Bundle();
    b.putString("key", "Contacts");
    view=getTabView(R.drawable.ic_launcher);
    mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator(view), Fragment2.class, null);

    b = new Bundle();
    b.putString("key", "Custom");
    view=getTabView(R.drawable.ic_launcher);
    mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator(view),Fragment3.class, null);

}

Fragment3.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        View view=LayoutInflater.from(getActivity()).inflate(R.layout.activity_second, null);

        ((TextView)view.findViewById(R.id.second_act_text)).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                FragmentManager fm=getChildFragmentManager();
                FragmentTransaction fragmentTransaction=fm.beginTransaction();
                fragmentTransaction.replace(R.id.second_activity, new Fragment1()).addToBackStack(null).commit();
            }
        });
        return view;
    }

1 个答案:

答案 0 :(得分:2)

每个选项卡中不同片段导航堆栈的概念已在stackoverflow上讨论了很多次,例如:

Separate Back Stack for each tab in Android using Fragments

在不必管理自己的自定义导航后台堆栈的情况下实现此目的的一种简单/粗略方法是在每个选项卡下都有一个根片段,然后每当根片段想要导航到另一个片段(片段B)时,只需显示一个新的Activity最初使用片段B,并且Activity将有自己的片段导航回栈。

Tab1 ---> root frag1 - >活动(自己的导航返回堆栈) - > frag2

Tab2 ---> root frag3

Tab3 ---> root frag4 - >活动(自己的导航返回堆栈) - > frag5 - > frag6 - > frag7

执行此类操作的应用的示例实际上是StackAnywhere应用。它大量使用选项卡,但是当您在这些选项卡中导航时,它通常会将导航移动到新的活动。然而,YMMV采用这种方法。