FragmentTransaction

FragmentTransactionは、フラグメントの追加や置き換えなどの操作をするクラス・・・。

FragmentTransaction | Android Developers

FragmentManagerの項では、Fragmentタグを2つ用意して、activity_main.xmlに静的に埋め込んだ・・・。
今回は、メニューアイテムが選択されたら、FragmentTransactionで動的にフラグメントを切り替える・・・。

activity_main.xmlは、

LinearLayoutの中には、FrameLayoutのframelayout1が1つだけ・・・。
このframelayout1をFragmentに置き換えていくのである・・・。

f:id:BG1:20160913153028p:plain

Android XML Fileを追加・・・。

f:id:BG1:20160913153113p:plain

fragment_main.xmlとして、

フラグメントの外側はLinearLayout・・・。
中にはTextView・・・。
このLinearLayout、fragment_main_linearlayoutの背景色と、TextView、fragment_main_textviewのテキストが、フラグメントが切り替わるたびに変わるようにする・・・。

f:id:BG1:20160913153644p:plain

Folderを追加・・・。

f:id:BG1:20160913153718p:plain

menuフォルダ・・・。

f:id:BG1:20160913153821p:plain

それができたら、またXMLを追加・・・。

f:id:BG1:20160913153919p:plain

main.xml・・・。

メニューを3項目・・・。

f:id:BG1:20160913155216p:plain

Classを追加・・・。

f:id:BG1:20160913155411p:plain

MainFragment.javaとし、Browseを選択して、

f:id:BG1:20160913155600p:plain

Fragmentを選択して、

f:id:BG1:20160913155645p:plain

これで、Fragmentが親クラスのMainFragmentとなったので、これを追加・・・。

MainActivity.javaでは、

onCreate時に、getFragmentManager()でfragmentManagerを取得・・・。

Menu1が選択されたら、fragmentManager.beginTransactionでfragmentTransactionが取れる・・・。
MainFragmentオブジェクトfragmentを生成したら、textを"fragment1"、colorを"red"として、Bundle型argsにセットしておいて、fragment.setArgumentsでセット・・・。
fragmentTransaction.replaceでframelayout1をfragmentに置き換える・・・。
fragmentTransaction.commitを呼ばないと、確定にならないので注意・・・。

Menu2、Menu3も同様に・・・。
Menu2はtextが"fragment2"でcolorが"green"、Menu3はtextが"fragment3"でcolorが"blue"・・・。

で、置き換えが起こると、MainFragmentのonCreateViewが呼ばれる・・・。

inflater.inflateでR.layout.fragment_mainをもとにビューが作成される・・・。
fragmentViewにそのビューをいったん入れておく・・・。
また、getArgumentsで渡されたパラメータを取り出してtextとcolorに・・・。
fragmentView.findViewByIdでR.id.fragment_main_textviewなtextViewを見つけたら、textView.setTextでtextをセット・・・。
fragmentView.findViewByIdでR.id.fragment_main_linearlayoutなlinearLayoutを見つけたら、linearLayout.setBackgroundColorでcolorに指定された色をセット・・・。
最後にfragmentViewを返す・・・。
これでフラグメントに指定したtextとcolorが反映される・・・。

f:id:BG1:20160913161635p:plain

最初は白いが、

f:id:BG1:20160913161706p:plain

メニューを出して、Menu1を押すと、

f:id:BG1:20160913161732p:plain

赤いFragment1・・・。

f:id:BG1:20160913161805p:plain

メニューを出して、今度はMenu2を押すと、

f:id:BG1:20160913161838p:plain

緑のFragment2・・・。

f:id:BG1:20160913161917p:plain

メニューを出して、今度はMenu3を押すと、

f:id:BG1:20160913161937p:plain

青のFragment3になった・・・。

こんな風に、フラグメントをメニューで動的に切り替えられるようになった・・・。

Sample/android/FragmentTransaction/FragmentTransaction/src/FragmentTransaction at master · bg1bgst333/Sample · GitHub