下の図に示すように、3つのフラグメントがあります。 .xmlファイルを使用してこれら3つのフラグメントすべてをLinearLayoutに追加し、ランチャーアクティビティが開始したら、setContentViewを使用してその.xmlレイアウトをロードします。
fragment2をいくつか制御しています。いずれかをクリックすると、FragmentTransactionおよびcommitメソッドを使用して、fragment4がプログラムによって読み込まれます。このフラグメントは画面に追加されますが、問題は、プログラムで追加されたフラグメント4が画面領域全体を占めることです。何が問題なのでしょうか?
注:f2で任意の項目をクリックします。f2のみを新しいフラグメントf4に置き換えます。 xmlレイアウトファイルを通じてf1、f2、f3を追加し、プログラムで新しいフラグメントf4を追加したことを覚えておいてください。
常にプログラムでフラグメントを追加、削除、置換する必要があります。そのため、F-1、F-2、F-3フラグメントをFrameLayoutなどのコンテナーに置き換えることをお勧めします。
基本的に<fragment/>
要素をF-1として、それを<FrameLayout/>
要素。次に、FragmentActivityのonCreateでフラグメントトランザクションを実行します。
Fragment1 f1 = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
ここで、F-1、F-2、F-3についてこれを行ったとします。次に、OnClickListener
で同じことをもう一度実行して、f2をf4に置き換えます。
public void onClick(View v) {
Fragment4 f4 = new Fragment4();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
XMLのフラグメントのプレースホルダーとしてFrameLayoutのみを保持します。 OnCreateで、フレームレイアウトにフラグメントをロードします。フラグメントのOnClickで、その特定のFrameLayoutのIDを指定して、Fragment4に置き換えます。