ActionBar.Tab

TabHostは非推奨になったので、Android3以降はActionBarの登場とともに、ActionBar.Tabというタブの機能が付くようになった・・・。

ActionBar.Tab | Android Developers

ActionBar.Tabでタブを作成、画面はそれぞれがFragmentとなる・・・。

f:id:BG1:20161019101755p:plain

XMLで、

f:id:BG1:20161019101813p:plain

fragment1、

f:id:BG1:20161019101840p:plain

fragment2、

f:id:BG1:20161019101856p:plain

fragment3を追加・・・。

で、

で、

という感じでそれぞれTextViewだけの画面・・・。

表示するテキストは、フラグメント1~フラグメント3・・・。

f:id:BG1:20161019102229p:plain

Classを追加・・・。

f:id:BG1:20161019102251p:plain

と、

f:id:BG1:20161019102305p:plain

と、

f:id:BG1:20161019102320p:plain

という感じでFragment1.java、Fragment2.java、Fragment3.javaを追加・・・。

Fragment1.javaなら、fragment1.xmlのリソースを反映・・・。
で、

で、

同様にFragment2.java、Fragment3.javaもリソース反映・・・。

f:id:BG1:20161019102918p:plain

Interfaceを追加・・・。

f:id:BG1:20161019103029p:plain

タブが押された時にフラグメントを追加する処理を自分で書かないといけないので、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についても行う・・・。

f:id:BG1:20161019105904p:plain

起動すると、タブ1選択でフラグメント1が表示され、
タブ2を選択すると、

f:id:BG1:20161019110023p:plain

フラグメント2が表示・・・。
タブ3なら、

f:id:BG1:20161019110048p:plain

フラグメント3が表示される・・・。

Sample/android/ActionBar.Tab/ActionBar.Tab/src/ActionBar.Tab at master · bg1bgst333/Sample · GitHub