【Android】Fragmentを入れ子にする
Fragmentを入れ子(ネスト)にするメモです。
(確認環境:Android4.1)
下図のようなイメージを例にとります。
まず親Fragmentである Fragment 1 です。
・Fragment1.java
//..略 import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; //..略 public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_hoge, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); FragmentTransaction transaction = getChildFragmentManager() .beginTransaction(); Fragment childFragment1 = new ChildFragment1(); Fragment childFragment2 = new ChildFragment2(); transaction.add(R.id.child_fragment_1, childFragment1, "child_1"); transaction.add(R.id.child_fragment_2, childFragment2, "child_2"); transaction.commit(); } }
親フラグメントのレイアウトは下記のようにします。
・fragment_hoge.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/child_fragment_1" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"/> <FrameLayout android:id="@+id/child_fragment_2" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"/> </LinearLayout>
上記のようにimportをサポートライブラリにするとAndroid1.6から使えるようです。
また、Fragmentをネストする場合は、動的に追加しなければならないようです。
子Fragmentについては省略します。。
以上です。
※参考
Fragmentをネストする際の注意点 - Just for Fun
Android 4.2 APIs | Android Developers