Как использовать tabHost для Android

Я просмотрел сообщения о переполнении стека и в учебных пособиях на других сайтах, и я не понимаю, как использовать TabHost . Может ли кто-нибудь объяснить это мне и, возможно, отправить мне ссылку на учебник?

Концепция TabHost

Введите описание изображения здесь

  1. В ManiActivity расширяет 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); } } 
  • В этом упражнении не используйте макет «activity_main.xml».

  • Tabhost mTabHost = getTabHost (); Создает основную вкладку.

  • MTabHost.newTabSpec ("first") создает tabspec id "first".

  • SetIndicator («Первый») создает текст «Первый» в закладке заголовка.

  • SetContent (новый Intent (this, FirstActivity.class)) использует контент из FirstActivity.class (FirstActivity.java)

  • MTabHost.addTab (….) добавляет spectab к главной вкладке

  • MTabHost.setCurrentTab (0) – вкладка defult во время начальной страницы.

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» – содержимое first_layout.xml

  • «R.layout.second_layout» является содержимым от second_layout.xml

В AndroidManifest.xml добавьте название действия «.FirstActivity» и «.SecondActivity» в примере xml.

Введите описание изображения здесь

Конец!!!!!

Введите описание изображения здесь

Прежде всего, в то время как TabHost не устарел, TabActivity с другой стороны устарел из-за Fragment API.

Существует два способа использования TabHost; Используя фрагмент через FragmentTabHost и используя TabHost.TabContentFactory .

1. Использование фрагмента через FragmentTabHost

В этом примере кода показано, как использовать TabHost в действии.

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> 

Фактически, используя Фрагмент, вы можете использовать Tab внутри фрагмента ( документы Android ).

2. Использование 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> 

Тем не менее, я лично рекомендую использовать новый класс TabLayout класса Material Design .