2013-12-09 23 views
35

我想在片段內添加一個TabHost。代碼如下。這裏面的碎片。我想補充TabHost顯示兩個標籤:在Android中添加Fragment內的Tab?

package com.nordicsoft.dilosysNewVersion; 

import android.app.Fragment; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TabHost; 

public class Fragment_Coupons extends Fragment { 
    TabHost tabHost; 
    TabHost.TabSpec spec; 

    public Fragment_Coupons() { 
    } 

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

     View rootView = inflater.inflate(R.layout.fragment_coupon, container, 
       false); 
     tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost); 
     tabHost.setup(); 
     //Add_Text_To_Tab("Android", "IOS"); 

     Intent intentAndroid = new Intent().setClass(getActivity(), 
       Aclass.class); 
     spec = tabHost.newTabSpec("Android").setContent(intentAndroid) 
       .setIndicator("Android"); 

     tabHost.addTab(spec); 

     Intent intentBus = new Intent().setClass(getActivity(), Bclass.class); 
     spec = tabHost.newTabSpec("Welcome").setIndicator("Welcome") 
       .setContent(intentBus).setIndicator("Welcome"); 
     tabHost.addTab(spec); 
     return rootView; 
    } 

} 

的XML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
    </LinearLayout> 
</TabHost> 

這是給我的錯誤:

12-09 17:40:53.509: E/AndroidRuntime(18103): FATAL EXCEPTION: main 
12-09 17:40:53.509: E/AndroidRuntime(18103): java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'? 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:690) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost.setCurrentTab(TabHost.java:356) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost.addTab(TabHost.java:246) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at com.nordicsoft.dilosysNewVersion.Fragment_Coupons.onCreateView(Fragment_Coupons.java:32) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.BackStackRecord.run(BackStackRecord.java:622) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Handler.handleCallback(Handler.java:605) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Looper.loop(Looper.java:137) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.ActivityThread.main(ActivityThread.java:4517) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at java.lang.reflect.Method.invokeNative(Native Method) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at java.lang.reflect.Method.invoke(Method.java:511) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
12-09 17:40:53.509: E/AndroidRuntime(18103): at dalvik.system.NativeStart.main(Native Method) 
12-09 17:46:02.770: I/Process(18103): Sending signal. PID: 18103 SIG: 9 
+0

我有相同的問題,根本無法找到一個解決方案。你有沒有想過呢? – Chris

回答

1

嘗試加入這一行

tabHost.setup(this.getActivity().getLocalActivityManager()); 

前行

tabHost.addTab(spec); 

或嘗試加入:

LocalActivityManager mLocalActivityManager = new LocalActivityManager(this.getActivity(), false); 
mLocalActivityManager.dispatchCreate(savedInstanceState); 
host.setup(mLocalActivityManager); 
+0

.getLocalActivityManager()不工作.... :( – NRahman

+0

嘗試第二個? – SalGad

+0

沒有工作:( – NRahman

68

嘗試這樣做處理標籤:

public class MainFragment extends Fragment { 
    private FragmentTabHost mTabHost; 

    //Mandatory Constructor 
    public MainFragment() { 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

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

     View rootView = inflater.inflate(R.layout.fragment_tabs,container, false); 


     mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost); 
     mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment B"), 
       FragmentB.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"), 
       FragmentC.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Fragment D"), 
       FragmentD.class, null); 


     return rootView; 
    } 
} 

的佈局:

<android.support.v4.app.FragmentTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

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

    </LinearLayout> 
</android.support.v4.app.FragmentTabHost> 

的MotherActivity舉辦MainFragment:

public class MotherActivity extends FragmentActivity { 

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

     MainFragment fragmenttab = new MainFragment(); 
     getSupportFragmentManager().beginTransaction() 
     .add(R.id.item_detail_container, fragmenttab).commit(); 


    } 

而且MotherActivity佈局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/item_detail_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
/> 

在此之後只創建正常片段B和C等類。 結果將是:

Tab Fragment inside Fragment Result

+4

我有一個錯誤在渲染過程中引發異常:在片段的佈局中沒有標籤爲空的標籤xml –

+1

@ElCharro ....感謝這個解決方案....這是非常有用的時候結合抽屜和標籤效果...沒有傳呼機,滑塊等![+1] – Devrath

+0

@AllenChun我已經解決了錯誤刷新並清理該項目.. – Nepster

相關問題