TabHostは非推奨になったので、Android3以降はActionBarの登場とともに、ActionBar.Tabというタブの機能が付くようになった・・・。
ActionBar.Tab | Android Developers
ActionBar.Tabでタブを作成、画面はそれぞれがFragmentとなる・・・。
XMLで、
fragment1、
fragment2、
fragment3を追加・・・。
で、
で、
という感じでそれぞれTextViewだけの画面・・・。
表示するテキストは、フラグメント1~フラグメント3・・・。
Classを追加・・・。
と、
と、
という感じでFragment1.java、Fragment2.java、Fragment3.javaを追加・・・。
Fragment1.javaなら、fragment1.xmlのリソースを反映・・・。
で、
で、
同様にFragment2.java、Fragment3.javaもリソース反映・・・。
Interfaceを追加・・・。
タブが押された時にフラグメントを追加する処理を自分で書かないといけないので、ActionBar.TabListener派生・・・。
コンストラクタでアクティビティ、タグ、生成するFragmentクラスを受け取る・・・。
onTabSelectedの時にフラグメントがなければaddしてshow、あればshow・・・。
(Fragment.instantiateでもFragmentを生成できる模様・・・。)
別のタブに行くと、onTabUnselectedになり、hide・・・。
そして、選択されたタブはonTabSelectedに・・・。
onTabReselectedは選択されているタブがさらに押された時らしい・・・。なのでhide・・・。
activity_main.xmlは、
FrameLayoutで、ここがタブごとに切り替わる・・・。
MainActivityでは、getActionBarでactionBarを取得したら、actionBar.setNavigationModeでActionBar.NAVIGATION_MODE_TABSをセット・・・。
これでアクションバーが表示されるモードになる・・・。
タブを追加する・・・。
actionBar.newTabで、タブが生成されるので、ActionBar.Tabオブジェクトtab1に格納・・・。
setTextでタブ名"タブ1"をセット・・・。
ここでCustomTabListenerオブジェクトlistener1のコンストラクタに、this、タグ"tag1"、生成するFragmentクラスFragment1.classを渡す・・・。
tab1.setTabListenerでlistener1をセット・・・。
最後にactionBar.addTabでtab1を追加・・・。
これをtab2、tab3についても行う・・・。
起動すると、タブ1選択でフラグメント1が表示され、
タブ2を選択すると、
フラグメント2が表示・・・。
タブ3なら、
フラグメント3が表示される・・・。
Sample/android/ActionBar.Tab/ActionBar.Tab/src/ActionBar.Tab at master · bg1bgst333/Sample · GitHub