如何在Android中将选项卡布局引入片段中

如何在Android中将选项卡布局引入片段中,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我的活动中有两个片段。那很好。现在在我的一个片段中,我需要两个选项卡式内容。在每个选项卡中,我需要为视图充气。如何在oncreateview方法中实现这一点?可能吗 以下是我的XML布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300dp" andro

我的活动中有两个片段。那很好。现在在我的一个片段中,我需要两个选项卡式内容。在每个选项卡中,我需要为视图充气。如何在oncreateview方法中实现这一点?可能吗

以下是我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="match_parent"
android:background="@drawable/texture_background"
android:baselineAligned="false"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#000" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_marginBottom="10dp"
        android:padding="10dp"
        android:text="header"
        android:textColor="#fff"
        android:textSize="25dp" >
    </TextView>
</LinearLayout>
<TabHost
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</TabHost>
</LinearLayout>
这是我的错误:

    11-19 21:29:32.666: E/AndroidRuntime(28686): FATAL EXCEPTION: main
11-19 21:29:32.666: E/AndroidRuntime(28686): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.WrapperActivity}:   java.lang.IllegalArgumentException: you must specify a way to create the tab content
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.os.Looper.loop(Looper.java:137)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread.main(ActivityThread.java:5039)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at java.lang.reflect.Method.invokeNative(Native Method)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at java.lang.reflect.Method.invoke(Method.java:511)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at dalvik.system.NativeStart.main(Native Method)
11-19 21:29:32.666: E/AndroidRuntime(28686): Caused by: java.lang.IllegalArgumentException: you must specify a way to create the tab content
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.widget.TabHost.addTab(TabHost.java:225)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at com.example.fragments.SavedFragment.onCreateView(SavedDealsFragment.java:120)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.Fragment.performCreateView(Fragment.java:1695)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.Activity.performStart(Activity.java:5113)
11-19 21:29:32.666: E/AndroidRuntime(28686):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)

我需要提供任何其他详细信息吗?

您不提供选项卡的内容。您可以使用
选项卡ContentFactory
构建如下内容:

TabHost.TabSpec tab = tabs.newTabSpec("tab1");
tab.setIndicator("my tab content");
tab.setContent(new TabHost.TabContentFactory() {

            @Override
            public View createTabContent(String tag) {
                if (tag.equals("tab1")) {
                    // create/inflate the view for the tab 1
                    return view;
                } else {
                    // the same as tab 1 for the other tabs if you have any             
            }
        });
tabs.addTab(tab);

异常告诉您没有为选项卡设置内容。使用tab上的方法
setContent()
,实现
TabHost.TabContentFactory
。是。但是我可以在tab.setContent()中传递什么呢?它需要一个视图id或意图。在我的例子中,我希望在每个选项卡中都有一个视图。我怎样才能使它们膨胀呢?我会尝试一下,让你知道“TabContentFactory无法解析为类型”,而且也没有setTag方法。哇。它起作用了。谢谢@Luksprog。观点被夸大了。你节省了我的时间。还有一个疑问。我无法使用此选项获取选项卡标题。因此,我无法转到下一个选项卡。@intrepidkarthi我不确定我是否理解最后一个问题是什么?如何移动到下一个选项卡?这只是加载第一个选项卡的内容,而不是通过setIndicator方法设置的标题文本。
TabHost.TabSpec tab = tabs.newTabSpec("tab1");
tab.setIndicator("my tab content");
tab.setContent(new TabHost.TabContentFactory() {

            @Override
            public View createTabContent(String tag) {
                if (tag.equals("tab1")) {
                    // create/inflate the view for the tab 1
                    return view;
                } else {
                    // the same as tab 1 for the other tabs if you have any             
            }
        });
tabs.addTab(tab);