仕事で下にメニュータブがあり、さらに上にもタブがあるようなレイアウトを作成したので、作り方をメモします。
仕事で作ったのはこんな画面です。

スクリーンショット 2016-05-29 18.28.08

下がメニューとなっていて、コンテンツ画面もスワイプできるようになっています。
まず、下タブレイアウトから作ります。

下タブのレイアウトを作る

Activity1個フラグメント複数という構成で作成します。
まずはmainActivityから

タブを生成するのに、FragmentTabHostを使用しています。
タブの大元みたい。
その大元に対して、TabSpecと呼ばれる部品を突っ込んでいます。

突っ込むフラグメントのViewがそのまま表示されるわけですね。
続いて、大事なxmlを見ます。

タブを下にもってくるために、Tabwidgetにlayout_align_ParentBottom=”true”を
id:tabcontentとcontainerにlayout_aboveを入れています。
もちろん中身であるcontainerのlayout_height=”match_parent”を入れています。
これで、下タブレイアウトの完成です。
タブにセットするFragmentには、TextViewをセットしています。

上にタブのある画面を作る

次は、上タブを作ります。ViewPagerを使います。
上タブの対象となるのは、一番左にセットしたPageFragmentです。
PageFragmentにViewPagerをセットします。

TabLayoutを使って、ViewPagerをタブっぽくしたのは、前やったんですが、
前と違うのはこの部分です。

FragmentMangerでなく、ChildFragmentMangerを利用します。
セットする子のFragmentに対して作用する必要があるので、当然か
では、PageFragmentのxmlを見ます。

前と変わりないですね。
最後は、対象AdapterのSampleFragmentPagerAdapterです。

これで、レイアウト自体は終了です。

タブを使用した際のライフサイクルはどうなっているのか?

プログラマとして気になることは、ライフサイクルがどうなっているかです。
もし、自分の予期した挙動と違ったら、重大なバグが起き、いろんな意味で死にます。
気になる挙動をログで見ましょう。
まずは、初期画面一番上にはっつけた画像の状態のログです。

05-29 06:22:02.371 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.MainActivity﹕ onCreate
05-29 06:22:02.399 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.PageFragment﹕ onCreateView
05-29 06:22:02.405 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.ContentFragment1﹕ onCreateView
05-29 06:22:02.406 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.ContentFragment1﹕ onResume
05-29 06:22:02.406 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.ContentFragment2﹕ onCreateView

ViewPagerのコンテンツとなるFragment2つともonCreateViewが呼ばれています。ViewPagerは画面となっている画面の左右も生成されるので、当たり前か
では、タブを移った時は、どうなるでしょうか?
スクリーンショット 2016-05-29 19.29.36

ログはこうなります。
05-29 06:24:39.996 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.ContentFragment1﹕ onStop
05-29 06:24:39.996 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.ContentFragment2﹕ onStop
05-29 06:24:39.998 19442-19442/com.example.jiji30000.viewpagersample D/com.example.jiji30000.viewpagersample.PageFragment2﹕ onCreateView

ContentFragmentにはonStopとonDetachにLogを仕込んでいますが、
画面が破棄された時に呼ばれるonDetachは呼ばれていません。
つまり、メモリ上に残っていることになります。
一つのActivityに対して、これらの複数のFragmentをセットしているからだと理解しました。当たり前だけど、

Pocket