安卓:FragmentTabHost:与标签导航片段重叠问题(Android: FragmentTa

2019-08-19 09:48发布

我已经得到了一些样品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>

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);

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;
    }

存在的问题:**

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

  • 2)然后我按下制表符,则Fragment4的布局中的所有画面被重叠

  • 3)如果我按转到第二个选项卡按钮,如何重定向到Fragment2并同时第二标签应突出。

**

请我做这件事的最佳方法。

Answer 1:

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

这是正在发生的事情:

  1. 您导航到选项卡3。
  2. 您按下转到fragment4按钮,这会导致你的代码来替换fragment4 fragment3
  3. 按另一个选项卡指标。 这将导致FragmentTabHost删除当前片段(它仍然认为是Fragment3),并添加新的片段。 该Fragment4,您手动添加的,还是存在的。 为了避免这种情况,你可以添加的标签更改事件侦听器,并明确删除Fragment4如果是有..甚至更好,你可以添加Fragment4作为Fragment3的子片段。 这样,当你离开TAB3它会自动消失,当你回到TAB3它会再次出现。 这只是取决于你试图完成什么。


文章来源: Android: FragmentTabHost: Navigating Fragment Overlapping Issues with tabs