Android:FragmentTabHost:使用选项卡导航片段重叠问题

时间:2013-04-04 07:09:17

标签: android android-fragments fragment

我有一些示例FragmentTabHost项目。我做了一些项目所需的修改。 我的标签栏xml(bottom_tabs.xml)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>

enter image description here enter image description here enter image description here

oncreate() - FragmentActivity

mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        Bundle b = new Bundle();
        b.putString("key", "Simple");
        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
                Fragment1.class, b);
        //
        b = new Bundle();
        b.putString("key", "Contacts");
        mTabHost.addTab(mTabHost.newTabSpec("contacts")
                .setIndicator("Contacts"), Fragment2.class, b);
        b = new Bundle();
        b.putString("key", "Custom");
        mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
                Fragment3.class, b);

enter image description here

Fragment3类

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

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_3,
                null);  
        Button b = (Button) root.findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                 Fragment f;
                    f = (Fragment) new Fragment4();
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.realtabcontent, f);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);
                   ft.commit();
            }
        });
        return root;
    }

enter image description here enter image description here

问题:        **

  • 1)如果我在Fragment3中按goto1按钮,它会重定向到Fragment4。 没有问题

  • 2)然后我按下标签,Fragment4的布局重叠 在所有的屏幕

  • 3)如果我按转到第二个标签按钮,如何重定向到Fragment2和 同时第二个标签应突出显示。

**

请为我提供最好的方法。

1 个答案:

答案 0 :(得分:0)

要更改标签,您应该使用FragmentTabHost.setCurrentTab()方法,而不是自己使用FragmentTransaction (内部处理)。 Fragment4出现重叠的原因是因为更改标签时永远不会删除它。

这就是发生的事情:

  1. 导航至标签3.
  2. 按goto fragment4按钮,导致代码将fragment3替换为fragment4
  3. 您按另一个标签指示。这会导致FragmentTabHost删除当前片段(它仍然认为是片段3)并添加新的片段。您手动添加的Fragment4仍然存在。为了避免这种情况,您可以为制表符更改事件添加一个侦听器,如果存在则显式删除Fragment4。或者甚至可以将Fragment4添加为Fragment3的子片段。这样当你离开Tab3时它会消失,当你返回到Tab3时它会再次出现。这取决于你想要完成的任务。