28

Ich arbeite an einer Android App und ich möchte 3 Registerkarten für die Navigation mit Fragmente für jede Registerkarte verwenden, aber ich weiß nicht, wie Sie die Struktur dafür erstellen.TabHost mit Fragmenten und FragmentActivity

Ich möchte jedes Fragment einzeln hinzufügen, da jedes anders ist, aber ich weiß nicht, wo Sie sie in FragmentActivity hinzufügen.

Ich habe diese Dateien.

tabs_layout.xml

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

    <TabHost 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" > 

      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
      /> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 

      > 

       <FrameLayout 
        android:id="@+id/tabRateAPet" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 

       <FrameLayout 
        android:id="@+id/tabViewMyRates" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 

       <FrameLayout 
        android:id="@+id/tabViewGlobalRates" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 

       /> 


      </FrameLayout> 
     </LinearLayout> 
    </TabHost> 
</LinearLayout> 

TabsMain.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 

public class MainTabsActivity extends FragmentActivity { 
public static final String RATE_A_PET = "Rate a Pet"; 
public static final String MY_RATES = "My Rates"; 
public static final String GLOBAL_RATES = "Global Rates"; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs_layout); 
} 
} 

Tabs.java

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TabHost; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TabHost.TabSpec; 
import android.widget.TextView; 

public class Tabs extends Fragment implements OnTabChangeListener { 
    private static final String TAG = "FragmentTabs"; 
    public static final String RATE_A_PET = "Rate a Pet"; 
    public static final String MY_RATES = "My Rates"; 
    public static final String GLOBAL_RATES = "Global Rates"; 

    private View mRoot; 
    private TabHost mTabHost; 
    private int mCurrentTab; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
//  super.onCreateView(inflater, container, savedInstanceState); 
     mRoot = inflater.inflate(R.layout.tabs_layout, null); 
     mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost); 
     setupTabs(); 
     return mRoot; 
    } 

    private void setupTabs() { 
     mTabHost.setup(); // important! 
     mTabHost.addTab(newTab(RATE_A_PET, R.string.tabRateAPet, R.id.tabRateAPet)); 
     mTabHost.addTab(newTab(MY_RATES, R.string.tabViewMyRates, R.id.tabViewMyRates)); 
    } 

    private TabSpec newTab(String tag, int labelId, int tabContentId) { 
     Log.d(TAG, "buildTab(): tag=" + tag); 

     View indicator = LayoutInflater.from(getActivity()).inflate(
       R.layout.tab, 
       (ViewGroup) mRoot.findViewById(android.R.id.tabs), false); 
     ((TextView) indicator.findViewById(R.id.text)).setText(labelId); 

     TabSpec tabSpec = mTabHost.newTabSpec(tag); 
     tabSpec.setIndicator(indicator); 
     tabSpec.setContent(tabContentId); 
     return tabSpec; 
    } 


    @Override 
    public void onTabChanged(String tabId) { 
     Log.d(TAG, "onTabChanged(): tabId=" + tabId); 
     if (RATE_A_PET.equals(tabId)) { 
      updateTab(tabId, R.id.tabRateAPet); 
      mCurrentTab = 0; 
      return; 
     } 
     if (MY_RATES.equals(tabId)) { 
      updateTab(tabId, R.id.tabViewMyRates); 
      mCurrentTab = 1; 
      return; 
     } 
     if (GLOBAL_RATES.equals(tabId)) { 
      updateTab(tabId, R.id.tabViewGlobalRates); 
      mCurrentTab = 2; 
      return; 
     } 
    } 
    private void updateTab(String tabId, int placeholder) { 
     FragmentManager fm = getFragmentManager(); 
     if (fm.findFragmentByTag(tabId) == null) { 
      fm.beginTransaction() 
        .replace(placeholder, new RateMyPetActivity(), tabId) 
        .commit(); 
     } 
    } 

}