2012-07-24 23 views
14

He visto publicaciones en Stack Overflow y en tutoriales en otros sitios web, y no puedo entender cómo usar TabHost. ¿Alguien puede por favor explicarme y tal vez enviarme un enlace a un tutorial?¿Cómo uso tabHost para Android

+7

TabHost está en desuso y se recomienda utilizar Fragmentos en su lugar. Aquí hay un tutorial sobre Fragments: http://www.vogella.com/articles/Android/article.html#fragments_tutorial. Si realmente quieres usar TabHost, tal vez alguien más pueda ayudar. No tengo mucha experiencia con eso. ¡Buena suerte! –

+0

¿Existe realmente una relación entre tabHosts y fragmentos? –

+1

@AndyHarris TabHost NO está en desuso. TabActivity es. Por favor, dejen de difundir rumores falsos. – aldok

Respuesta

66

Concept TabHost

enter image description here

  1. En ManiActivity extiende TabActivity

    public class MainActivity extends TabActivity { 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
    
        //setContentView(R.layout.activity_main); 
    
        TabHost mTabHost = getTabHost(); 
    
        mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("First").setContent(new Intent(this ,FirstActivity.class))); 
        mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("Second").setContent(new Intent(this , SecondActivity.class))); 
        mTabHost.setCurrentTab(0); 
    
    
    } 
    } 
    
  • En este ac tivity no use el diseño "activity_main.xml".

  • Tabhost mTabHost = getTabHost(); es crear pestaña principal.

  • mTabHost.newTabSpec ("first") es create tabspec id "first".

  • setIndicator ("Primero") es crear el texto "Primero" en la pestaña de título.

  • setContent (nueva Intención (esto, FirstActivity.class)) es utilizar el contenido de FirstActivity.class (FirstActivity.java)

  • mTabHost.addTab (....) es añadir spectab a la pestaña principal

  • mTabHost.setCurrentTab (0) es la pestaña de defup cuando la página de inicio.

FirstActivity.java

public class FirstActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.first_layout); 
} 

} 

SecondActivity.java

public class SecondActivity extends Activity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.second_layout); 
} 
} 
  • "R.layout.first_layout" es el contenido de first_layout.xml

  • "R.layout.second_layout" es el contenido de second_layout.xml

En AndroidManifest.xml añadir nombre de la actividad ".FirstActivity" y ".SecondActivity" en el ejemplo xml.

enter image description here

Finalizar !!!!!

enter image description here

+0

Las pestañas no aparecen ... ¿por qué? – guiomie

+1

getTabHost() no funciona para mí. No se importa como un recurso. – Eenvincible

+0

@Evenvincible debe tener su actividad Extender TabActivity – Jimmar

0

En primer lugar, mientras que TabHost no está en desuso, TabActivity en otra parte es obsoleto debido a Fragment API.

Hay dos formas de usar TabHost; usando Fragment a través de FragmentTabHost y usando TabHost.TabContentFactory.

1. Utilizando Fragmento través FragmentTabHost

Este código espectáculo muestra cómo utilizar TabHost en la actividad.

FragmentTabHostActivity.java

public class FragmentTabHostActivity extends AppCompatActivity { 

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

     FragmentTabHost fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     fragmentTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent); 
     fragmentTabHost.addTab(getTabSpec1(fragmentTabHost), Tab1Fragment.class, null); 
     fragmentTabHost.addTab(getTabSpec2(fragmentTabHost), Tab2Fragment.class, null); 
    } 

    private TabHost.TabSpec getTabSpec1(FragmentTabHost tabHost) { 
     return tabHost.newTabSpec("First Tab") 
      .setIndicator("Tab1"); 
    } 

    private TabHost.TabSpec getTabSpec2(FragmentTabHost tabHost) { 
     return tabHost.newTabSpec("Second Tab") 
      .setIndicator("Tab 2"); 
    } 
} 

fragment_tab_host_activity.xml

<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:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <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="wrap_content" 
      android:layout_height="wrap_content"/> 

    </LinearLayout> 

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

realidad mediante el uso del fragmento, se puede utilizar la lengüeta dentro de un fragmento (Android docs).

2. Usando TabHost.ContentFactory

TabHostActivity.java

public class TabHostActivity extends AppCompatActivity implements TabHost.TabContentFactory { 

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

     TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
     tabHost.setup(); 

     tabHost.addTab(getTabSpec1(tabHost)); 
     tabHost.addTab(getTabSpec2(tabHost)); 
    } 

    private TabHost.TabSpec getTabSpec1(TabHost tabHost) { 
     return tabHost.newTabSpec("First Tab") 
      .setIndicator("Tab1") 
      .setContent(this); 
    } 

    private TabHost.TabSpec getTabSpec2(TabHost tabHost) { 
     return tabHost.newTabSpec("Second Tab") 
      .setIndicator("Tab 2") 
      .setContent(this); 
    } 

    @Override 
    public View createTabContent(String tag) { 
     return LayoutInflater.from(this).inflate(R.layout.activity_tab_1, null); 
    } 
} 

activity_main.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="match_parent" 
    android:layout_height="match_parent"> 

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

     <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="wrap_content" 
      android:layout_height="wrap_content"/> 

    </LinearLayout> 

</TabHost> 

Sin embargo, yo personalmente recomiendo el uso más reciente Material Design style TabLayout class.

Cuestiones relacionadas