Android- 在没有 v4 支持库的片段中创建选项卡

Android- Create tabs inside fragment without v4 support library

我正在尝试使用支持库为我的应用程序创建 'tabs' w/o,但我什至没有在任何地方找到一个简单的工作 example/tutorial。

由于我的整个应用程序都在使用 android.app.fragment,所以我无法将所有现有的 fragments 更改为 android.support.v4.app.Fragment

使用支持库在片段中创建一个选项卡是小菜一碟,但我想知道我们是否可以创建一个 w/o android.support.v4.app.Fragment.

将片段放在布局中的选项卡内容中 XML 并将它们添加到 onCreate 中的 TabHost

这个可以实现,很简单,跟着我的步骤:

1.Copy将FragmentTabHost的官方源代码添加到您的项目中,并更改以下3个class参考: android.support.v4.app.Fragmentandroid.app.Fragment android.support.v4.app.FragmentManagerandroid.app.FragmentManager android.support.v4.app.FragmentTransactionandroid.app.FragmentTransaction

2.Use 项目中 FragmentTabHost 的修改版本,忘记 android.support.v4 库。我编辑的版本:FragmentTabHost

示例代码:(显示第一个选项卡,延迟 5 秒后,您将看到第二个选项卡,我 运行 在我的 Android Studio 上成功!)

MainActivity.java

public class MainActivity extends Activity {

    FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTabHost = (FragmentTabHost) findViewById(R.id.tabhost);
        mTabHost.setup(this, getFragmentManager(), R.id.container);

        // Add each tab
        mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("first"), BlankFragment1.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("second"), BlankFragment2.class, null);


        mTabHost.postDelayed(new Runnable() {
            @Override
            public void run() {
                mTabHost.setCurrentTabByTag("second");
            }
        }, 5000);
    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <com.example.bill.myapplication.FragmentTabHost
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:id="@+id/tabhost">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TabWidget
                android:id="@android:id/tabs"
                android:orientation="horizontal"
                android:layout_width="0dp"
                android:layout_height="0dp"/>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="0dp"
                android:layout_height="0dp"/>

            <FrameLayout
                android:id="@+id/container"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>
        </LinearLayout>
    </com.example.bill.myapplication.FragmentTabHost>

</RelativeLayout>