2012-07-24 13 views
14

Przeglądałem posty w Stack Overflow i samouczkach na innych stronach internetowych i nie mogę zrozumieć, jak używać TabHost. Czy ktoś może mi to wyjaśnić i może wysłać mi link do samouczka?Jak używać tabHost dla Androida?

+7

TabHost jest przestarzałe i zaleca się używać Fragmentów zamiast tego. Oto samouczek dotyczący fragmentów: http://www.vogella.com/articles/Android/article.html#fragments_tutorial Jeśli naprawdę chcesz korzystać z TabHost, może ktoś inny może pomóc. Nie mam z tym większego doświadczenia. Powodzenia! –

+0

czy naprawdę istnieje związek między tabHosts a fragmentami? –

+1

@AndyHarris TabHost nie jest przestarzałe. TabActivity to. Przestań rozpowszechniać fałszywe plotki. – aldok

Odpowiedz

66

Concept TabHost

enter image description here

  1. W ManiActivity rozciąga 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); 
    
    
    } 
    } 
    
  • W AC tivity nie używa układu "activity_main.xml".

  • Tabhost mTabHost = getTabHost(); jest tworzenie głównej zakładki.

  • mTabHost.newTabSpec ("first") to stwórz identyfikator tabspec "first".

  • setIndicator ("First") to tekst "Pierwszy" w zakładce tytułu.

  • setContent (new Intent (ten, FirstActivity.class)) jest korzystanie z zawartości FirstActivity.class (FirstActivity.java)

  • mTabHost.addTab (....) to dodać Spectab do głównej karcie

  • mTabHost.setCurrentTab (0) to zakładka obrażeń na stronie startowej.

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" jest zadowolony z first_layout.xml

  • "R.layout.second_layout" jest zadowolony z second_layout.xml

W AndroidManifest.xml dodać nazwę aktywność ".FirstActivity" i ".SecondActivity" w przykładzie xml.

enter image description here

Finish !!!!!

enter image description here

+0

Zakładki nie pojawiają się ... dlaczego? – guiomie

+1

getTabHost() nie działa dla mnie. Nie importuje się jako zasób. – Eenvincible

+0

@Niezwyciężony powinieneś mieć swoją działalność Rozszerz TabActivity – Jimmar

0

Przede wszystkim podczas TabHost nie jest przestarzała, TabActivity na kolei jest przestarzała powodu Fragment API.

Istnieją dwa sposoby korzystania z TabHost; użycie Fragmentu poprzez FragmentTabHost i użycie TabHost.TabContentFactory.

1. Korzystanie Fragment poprzez FragmentTabHost

Ten przykładowy kod pokazują, jak korzystać TabHost aktywności.

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> 

Właściwie za pomocą fragmentu, można użyć Tab wewnątrz fragment (Android docs).

2. Korzystanie 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> 

Jednak ja osobiście polecam korzystania Ostatnio Material Design style TabLayout class.

Powiązane problemy